Django MEDIA_URL снова ... Необработанный - PullRequest
0 голосов
/ 23 февраля 2011

мой файл settings.py

MEDIA_ROOT = '/home/path/to/htdocs/mysite/public/media/'
MEDIA_URL = '/site_media/'
ADMIN_MEDIA_PREFIX = '/media/'

в site_media у меня есть мои изображения и CSS ... href="{{ MEDIA_URL }}/style.css" ... (с {{MEDIA_URL}} style.css это то же самое)

после рендера это выглядит следующим образом href="/site_media/style.css"

, но на http://example.com/site_media/style.css есть необработанное исключение (я думаю, что URL не отображается в urls.py)

все естьотлично работает в режиме отладки, потому что у меня есть это в urls.py

if settings.DEBUG:
    urlpatterns += patterns('',
    (r'^media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'media')}),
    (r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'site_media')}),
)

, но что мне нужно сделать, когда DEBUG = False

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

происходит то, что в режиме отладки django обслуживает ваш файл style.css.Вы говорите ему сделать это с этой строкой

(r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': os.path.join(os.path.dirname(__file__), 'site_media')}),

)

Но эта строка не входит в переменную urlpatterns, когда отладка имеет значение false.Чтобы проверить это, попытайтесь получить доступ к localhost:8000/site_media/style.css, когда отладка истинна (должна работать) и когда она ложна (выдаст ошибку 404.)

Вы можете просто пропустить

if settings.DEBUG:

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

В производственных настройках вы должны использовать другой веб-сервер для обслуживания ваших статических файлов.У меня был хороший опыт работы с nginx перед apache.

Это превосходное учебное пособие, в котором показано, как создать такую ​​настройку: http://www.ventanazul.com/webzine/tutorials/django-deployment-guide-ubuntu

Будьте готовы к тому, что создание производственной настройки не так безболезненно, как просто набрать python manage.py runserver.Я также слышал хорошие отзывы об использовании nginx вместе с gunicorn , что значительно упрощает настройку производственного сервера, но сам по себе не имел опыта.

0 голосов
/ 23 февраля 2011

Вам нужно как-то обслуживать их самостоятельно.

http://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-from-a-dedicated-server

В производстве используйте что-то вроде Apache или Nginx для обслуживания ваших статических файлов.

По сути, вы сопоставляете URL (в вашем случае /site_media/) на сервере с папкой на вашем сервере (как, например, где сейчас находится ваш каталог мультимедиа), и все готово.Все запросы к /site_media/ теперь не отправляются в ваше приложение, а идут в каталоге для поиска статических файлов.

Реализация зависит от того, какую настройку сервера вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...