Django не будет обслуживать статические файлы при использовании сервера разработки - PullRequest
3 голосов
/ 22 июля 2011

Я только что запустил новый сервер разработки для веб-сайта, над которым я работаю, и я не могу заставить сервер разработки 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})
)

Вот мой radio.frontend.urls

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 ]

3 голосов
/ 22 июля 2011

Вы пытаетесь получить доступ к вашим статическим файлам через '/ 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 для загрузки / выгрузки контента.

3 голосов
/ 22 июля 2011

В Django 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 голос
/ 08 апреля 2013

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

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

Это работает для меня

1 голос
/ 22 июля 2011

Проблема должна быть в вашем urls.py, так как AppendSlashMiddleware - то, что вызывает перенаправление на URL, заканчивающийся косой чертой - включается, только если URL не совпадает вообще, и из того, что вы показал, что должно совпадать.

Глупый вопрос, но вы уверены, что DEBUG верно? Можете ли вы показать остальную часть urls.py? Вы уверены, что это основной urls.py, а не тот, который включен другим?

Редактировать ОК, трудно увидеть, не увидев ваш radio.frontend.urls файл, но похоже, что происходит то, что все URL сопоставляются с этим - потому что вы используете r'^', чтобы включить его , что соответствует всему, что-то в этом файле также является слишком общим. Возможно, вы захотите разбить первый urlpattern и поставить включаемый после статического бита.

...