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/

Для сервера разработки

  1. Сделать статическую папку в корне django
  2. Добавьте это к STATIC_DIRS в settings.py ('assets','path to static static')
  3. Поместите ресурсы в соответствующие папки в статической папке, которую вы создали ранее
  4. Затем запустите python manage.py collectstatic. Это создаст администратор и папку ресурсов в корне django с активами, которые вы поместили
  5. В шаблонах добавьте {% load static %} вверху
  6. Для ссылки используйте {% 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 после статического бита.

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