Попытка обслужить статические файлы 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.AppDirectoriesFinderSTATICFILES_FINDERS по умолчанию) и переместите ваши статические файлы в каталог приложения.

Надеюсь, это немного прояснит ситуацию.

Другие вопросы по тегам