Рассмотрим следующую настройку:
urls.py
if not settings.PRODUCTION:
urlpatterns += patterns('',
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_ADMIN_MEDIA_ROOT, 'show_indexes': True}),
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_MEDIA_ROOT, 'show_indexes': True}),
)
settings.py
if not PRODUCTION:
ADMIN_MEDIA_PREFIX = '/admin-media/'
Так что при запуске на локальном сервере разработки мультимедийные файлы должны обслуживаться через сервер выполнения, верно? Маршрут носителя найден, однако для каждого запроса возвращается «Отказано в доступе» (но только один носитель администратора, обычный носитель работает нормально).
Так что я проверил это. Оказывается, если для ADMIN_MEDIA_PREFIX
установлено то же значение, что и для маршрута ...
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/admin-media/'
... тогда сервер выполнения всегда вернет сообщение «Отказано в доступе».
Однако, если ADMIN_MEDIA_PREFIX
отличается от имени маршрута ...
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/non-sense-prefix/'
... тогда файлы будут обработаны (хотя мне нужно вручную просмотреть их, чтобы увидеть их, так как все ссылки на мультимедиа не работают с http://localhost:8000/non-sense-prefix/whatever.jpg).
Что здесь за дело?
Тем временем я решил эту проблему, взломав каталоги ...
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/admin-media/../admin-media/'
... но я бы действительно предпочел настроить это правильно. Кажется, Джанго пытается быть умным и делать что-то от моего имени, но в процессе все портится. Есть идеи?
РЕДАКТИРОВАТЬ -
Я вручную обслуживаю административные носители, потому что использую grappelli, который обеспечивает замену административных шаблонов / носителей.