Django не будет обслуживать статические файлы при использовании сервера разработки
Я только что запустил новый сервер разработки для веб-сайта, над которым я работаю, и я не могу заставить сервер разработки Django обслуживать статические файлы, которые у меня есть для CSS и других вещей. CSS для админа сайта загружается нормально. Я запускаю его в песочнице virtualenv.
В settings.py я возился с MEDIA_ROOT и MEDIA_URL.
Пока что для MEDIA_ROOT я пробовал.
MEDIA_ROOT = '/home/wluw/wluw/wluw/media'
а также
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
Я изменил свой ADMIN_MEDIA_PREFIX на
ADMIN_MEDIA_PREFIX = '/admin_media/'
мой MEDIA_URL выглядит так
MEDIA_URL = '/media/'
и раздел urls.py для статических файлов выглядит следующим образом.
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)
Вот вывод с сервера dev, когда я пытаюсь получить доступ к странице.
[21/Jul/2011 21:19:25] "GET /media/css/style.css HTTP/1.1" 302 0
[21/Jul/2011 21:19:25] "GET /media/css/style.css/ HTTP/1.1" 404 2561
from django.conf.urls.defaults import patterns, include, handler500, handler404
from django.conf import settings
from django.contrib import admin
import d51_django_admin_piston
handler500 = 'radio.frontend.views.server_error'
admin.autodiscover()
d51_django_admin_piston.autodiscover(admin.site)
urlpatterns = patterns(
'',
(r'^logs/', include('radio.logs.urls')),
(r'^events/', include('radio.events.urls')),
(r'^station/', include('radio.station.urls')),
(r'^staff/', include('radio.staff.urls')),
(r'^admin/', include(admin.site.urls)),
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
(r'^', include('radio.frontend.urls')),
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
# {'document_root': settings.MEDIA_ROOT}),
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True})
)
Вот мой радио.фронтенд.урлы
from django.conf.urls.defaults import *
urlpatterns = patterns('radio.frontend.views',
url(r'^$', 'home', name='home'),
)
Вот мой файл settings.py settings.py
Все работало нормально на рабочем сервере с /media? быть URL для CSS и других вещей.
Также ни один контент в базе данных не отображается. Каждая страница сайта создается с base.html и viewname.html. Отображается только часть base.html. Я уверен, что это тема для другого вопроса, хотя.
Я просмотрел множество других сообщений с людьми, у которых была такая же проблема, и ни один из них не дал решения. Я полностью в тупике.
Любая помощь будет принята с благодарностью. Спасибо
4 ответа
Вы пытаетесь получить доступ к статическим файлам через "/ static /" вместо "/ media /", поскольку в своих комментариях вы говорите:
"GET /static/css/style.css HTTP/1.1" 302 0 [21/Jul/2011 21:13:31] "GET /static/css/style.css/ HTTP/1.1" 404
Либо вы получаете к нему доступ таким образом:
"GET /media/css/style.css HTTP/1.1" 302 0 [21/Jul/2011 21:13:31] "GET /media/css/style.css/ HTTP/1.1" 404
И вы устанавливаете свой URL в своих шаблонах соответственно.
Или вы настраиваете свою маршрутизацию следующим образом:
if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
# {'document_root': settings.MEDIA_ROOT}),
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True})
)
Я выберу второй и настрою settings.STATIC_FILE
как вы обычно используете MEDIA_ROOT
для загрузки / выгрузки контента.
В Джанго 1,3 MEDIA_ROOT
а также MEDIA_URL
используются для настройки физического местоположения для пользовательских загрузок.
Для статических файлов вы должны использовать STATIC_URL:
STATIC_URL = '/static/' # URL prefix for static files.
и STATICFILES_DIRS:
PROJECT_DIR = os.path.dirname(__file__)
# Additional locations of static files
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
сконфигурировано.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
В ваших шаблонах вы можете использовать переменную STATIC_URL для доступа к расположению ваших статических файлов:
<link href="{{ STATIC_URL }}css/style.css" rel="stylesheet" type="text/css" />
Этого должно быть достаточно для разработки env./server. Не нужно ничего настраивать в urls.py.
Для получения дополнительной информации вы можете посетить официальный сайт django doc, описывающий, как управлять статическими файлами: https://docs.djangoproject.com/en/dev/howto/static-files/
Для сервера разработки
- Сделать статическую папку в корне django
- Добавьте это к STATIC_DIRS в settings.py ('assets','path to static static')
- Поместите ресурсы в соответствующие папки в статической папке, которую вы создали ранее
- Затем запустите python manage.py collectstatic. Это создаст администратор и папку ресурсов в корне django с активами, которые вы поместили
- В шаблонах добавьте {% load static %} вверху
- Для ссылки используйте {% static 'assets/path_to_resources_as_added_in_the_static_folder' %}
Это работает для меня
Проблема должна быть в вашем urls.py
Так как AppendSlashMiddleware - то, что вызывает перенаправление на URL, заканчивающийся косой чертой, - включается только в том случае, если URL не совпадает вообще, и из того, что вы показали, должно совпадать.
Глупый вопрос, но ты уверен? DEBUG
правда? Можете ли вы показать остальную часть urls.py? Вы уверены, что это основной urls.py, а не тот, который включен другим?
Edit OK, трудно сказать, не видя вашего radio.frontend.urls
файл, но похоже, что происходит то, что все URL сопоставляются с этим - потому что вы используете r'^'
включить его, который соответствует всему, что-то в этом файле также является слишком общим. Возможно, вы захотите разбить первый urlpattern и поставить include после статического бита.