Подтвердить что ты не робот

Попытка использовать статические файлы 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, он сообщает мне, что Directory индексы не допускаются.

Что мне здесь не хватает?

4b9b3361

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

Надеюсь, что это немного облегчит.