Статические файлы Django не загружаются

я новичок Django, работающий над своим первым проектом и имеющий проблемы со статическими файлами.

я создал простую систему аутентификации, используя django.contrib.auth состоит из двух шаблонов:mysite/templates/index.html и mysite/templates/registration/login.html. У меня есть глобальный статический контент в mysite/static который я хочу иметь доступ ко всем шаблонам, отображаемым всеми приложениями.

mysite/templates/index.html содержит <img src="{{ STATIC_URL }}pics03.jpg"/> что делает как "static/pics03.jpg" и загружается нормально, когда я посещаю url localhost:8000/

mysite/templates/registration/login.html содержит <img src="{{ STATIC_URL }}pics03.jpg"/>, который также оказывает как "static/pics03.jpg" и не загружается, когда я посещаю url "localhost:8000/accounts/login/"

в моем urls.py у меня есть:

urlpatterns = patterns('',
   url(r'^$', 'mysite.views.home'), # plays index.html template
   url(r'^accounts/login/$', 'django.contrib.auth.views.login'),

в моем settings.py у меня есть:

PROJECT_DIR = os.path.dirname(__file__)

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR,'static'),
)  

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

STATIC_URL = '/static/'

STATIC_ROOT = ''

у меня сложилось впечатление, что Django должен искать глобальный статический контент в STATICFILES_DIRS, но он не находит статический контент для входа в систему.html, даже если я изменю url-адрес там на абсолютный путь к статической папке. Кто-нибудь может пролить свет на это?

3 ответов


ваша проблема в том, что вы не слушаете URL "/ static/ " нигде в вашем urls.py

Если вы подаете заявку через веб-сервер, например Apache или nginx, то это нормально, поскольку веб-сервер будет обрабатывать статические файлы сам.

для разработки Django поставляется со встроенным статическим сервером

к urls.py, в самом конце добавить

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

что это делает, это добавить/ static / url и позволить вам обслуживать тех, у кого нет web-сервер.

Это эквивалентно

url(
    regex=r'^static/(?P<path>.*)$', 
    view='django.views.static.serve', 
    kwargs={'document_root': settings.STATIC_ROOT,}
)

некоторые люди скажут вам, что вам нужно обернуть URL-правила в "настройки if.DEBUG " использовать правила только для разработчиков, но это вообще не нужно, и на самом деле я считаю, что это плохой совет.


у вас возникли проблемы при использовании сборки в runserver или вы используете Apache или аналогичный? Я немного с этим боролся. Документация, которую я следую:https://docs.djangoproject.com/en/dev/howto/static-files/

вторая часть является ключевой, когда вы готовы к развертыванию. Вам нужно определить статический корень (который будет пустым для начала) и запустить manage.py collectstatic команда для перемещения статических файлов со всего проекта в эту папку. Тогда ты может служить им оттуда.


не меняется STATIC_ROOT='' до STATIC_ROOT='/' помочь?

мне кажется, единственная разница в том, что static/pics03.jpg (относительный путь) существует на домашней странице, но не на другой.

абсолютный путь . Если меняется STATIC_ROOT не помогает, просто добавьте / к началу URL-адресов.