Хостинг Admin Media локально во время разработки - PullRequest
4 голосов
/ 04 декабря 2009

Рассмотрим следующую настройку:

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, который обеспечивает замену административных шаблонов / носителей.

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Если вы используете Grappelli, вы можете установить административный носитель при использовании runserver, указав аргумент командной строки --adminmedia. Вот пример:

python manage.py runserver --adminmedia=/path/to/grappelli/media

Где /path/to/grappelli/media - полный путь к каталогу media вашей установки Grappelli.

0 голосов
/ 04 декабря 2009
  • Я думаю, что проще в вашей локальной системе просто создать символическую ссылку на носитель администратора django, тот же каталог, который вы используете в производственной среде, чем подвергать воздействию множества PRODUCTION в настройках.

  • Как правильно заметил Даниэль, django по умолчанию обслуживает администраторов. Больше конфигурации не требуется. Так что проблема, возможно, в чем-то другом. Попробуйте chmod 777 в каталоге шаблонов, это может решить проблемы.

0 голосов
/ 04 декабря 2009

Вам не нужно специально обслуживать административные носители при использовании сервера разработки - это должно происходить автоматически.

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