Попытка обслужить статические файлы django на сервере разработки - не найдено
Я следовал инструкциям в этом вопросе, документации и даже смотрел на этот вопрос, но пока я не могу получить свои статические файлы, используя python manage.py runserver
,
Это мои (соответствующие?) Настройки:
STATIC_ROOT '/home/wayne/programming/somesite/static'
STATICFILES_DIRS ('/home/wayne/programming/somesite/static/styles',
'/home/wayne/programming/somesite/static/admin')
В моем urls.py:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# The rest of my urls here...
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
У меня есть следующий код в моем base.html
<link rel="stylesheet" type="text/css" href="{% static "styles/main.css" %}">
{% block styles %}
{% for sheet in styles %}
<link rel="stylesheet" type="text/css" href="{% static sheet %}">
{% endfor %}
И я обещаю, что не галлюцинирую
(.env)wayne:~/programming/somesite/static$ pwd
/home/wayne/programming/somesite/static
(.env)wayne:~/programming/somesite/static$ ls
admin styles
Тем не менее, когда перейдите к http://localhost:8000/
на моем сайте отсутствуют таблицы стилей, и когда я http://localhost:8000/static/styles/main.css
я получил 'styles/main.css' could not be found
и пытается перейти к localhost:8000/static/
, или же localhost:8000/static/styles
это говорит мне, что индексы каталога не разрешены.
Что мне здесь не хватает?
1 ответ
Обработка статических файлов в Django по-прежнему немного сбивает с толку, особенно с точки зрения именования соответствующих настроек.
Короткий ответ - переместить ваши статические файлы; вместо
/home/wayne/programming/somesite/static
положить их в
/home/wayne/programming/somesite/yourapp/static
(где "yourapp" - это название вашего основного приложения).
Более длинный ответ: я думаю, что вы (по понятным причинам) запутались в различных настройках. STATIC_ROOT
относитсятолько к месту, где ваши статические файлы должны заканчиваться после запуска manage.py collectstatic
, Вам не нужен этот набор (как на самом деле вам не нужно collectstatic
) при местном развитии. В любом случае, STATIC_ROOT
всегда должен ссылаться на пустой каталог.
Ваш STATICFILES_DIRS
настройка почти сработает, за исключением того, что вы сказали Django, что есть два пути для поиска статических файлов
/home/wayne/programming/somesite/static/styles
/home/wayne/programming/somesite/static/admin
поэтому, когда вы делаете {% static "styles/main.css" %}
это будет искать
/home/wayne/programming/somesite/static/styles/styles/main.css
/home/wayne/programming/somesite/static/admin/styles/main.css
и, очевидно, не найдет их. Что может работать
STATICFILES_DIRS = ('/home/wayne/programming/somesite/static',)
но в этом нет необходимости, так как вы можете просто положиться на django.contrib.staticfiles.finders.AppDirectoriesFinder
(в STATICFILES_FINDERS по умолчанию) и переместите ваши статические файлы в каталог приложения.
Надеюсь, это немного прояснит ситуацию.