Статические файлы 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-адресов.