2009-07-04 4 views
18

Я успешно работал с медиафайлами для обычных файлов MEDIA, но когда я попытался использовать файлы мультимедиа администрирования, я потерпел неудачу. пожалуйста, помогите мне найти проблему, так как я попытался устранить проблему уже несколько часов без везения (тоже был googling и прочитал django doc об обслуживании статических файлов).Django: обслуживает мультимедийные файлы ADMIN

ошибка, как я попытался получить доступ к LOCALHOST: 8000/СМИ/A.gif выглядит следующим образом:

Page not found: f:\python25\lib\site-packages\django/contrib/admin/media\a.gif

Я поставил файлы администратор медиа в папке с именем «СМИ», в то время как я ставлю нормальные СМИ файлы в каталоге с именем «статические». Я тоже в Windows.

Вот как я служу обычные мультимедийные файлы в urls.py:

# serve static files 
from django.conf import settings 
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT: 
    urlpatterns += patterns("django.views", 
     url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,}) 
    ) 

И мой settings.py (только важные штуки):

import project_path 
MEDIA_ROOT = project_path.MEDIA.replace('\\','/') 
MEDIA_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/media/' 
TEMPLATE_DIRS = (
    project_path.TEMPLATE.replace('\\','/'), 
) 

И мой project_path.py:

import sys 
from os.path import dirname, join 
ROOT = dirname(__file__) 
APP = join(ROOT, "apps") 
TEMPLATE = join(ROOT, "templates") 
MEDIA = join(ROOT, "static") 
ADMIN_MEDIA = join(ROOT, "media") 

Какие-либо намеки?

или, может быть, по крайней мере, пожалуйста, поделитесь, как вы служите медиафайлов администратора (без изменения каких-либо файлов с веб-сервера, но только с помощью исходного кода Джанго)

Заранее спасибо :)

+0

Вы когда-нибудь разрешали это? У меня есть аналогичный опыт работы с Mac с Django 1.1, работающий с обычными файлами мультимедиа, но не для администратора ... – Danielb

+0

Причина, по которой настройки URL не работают, заключается в том, что «django/core/management/commands/runserver. py' вместе с 'django.core.servers.basehttp' настройте обработчик WSGI для' ADMIN_MEDIA_PREFIX'. Он обрабатывает запрос до того, как URLconf попал – vdboor

ответ

1

Try изменение:

ADMIN_MEDIA_PREFIX = '/static/media/'

Это предполагает, что ваш MEDIA_ROOT/медиа/содержит папку администратора медиа (это то, что я понял из вашего вопроса).

+0

спасибо за ответ, но он все еще не работает :) Я набрал http: // localhost: 8000/static/media/a.gif в URL-адресе broswer и результате is: Страница не найдена: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

+0

Я думаю, что я попытаюсь снова создать проект с нуля, используя обычные примеры средств администрирования :) спасибо за ответы –

2

Попробуйте

(г '^ admin_media /(.*)', 'django.views.static.serve', { 'DOCUMENT_ROOT': 'Джанго/вно/администратора/СМИ /', '' show_indexes : True}),

в вашем файле urls.py. И измените ваш

ADMIN_MEDIA_PREFIX = '/admin_media/' 
+0

спасибо за ответ, но он все еще не работает :) Я набрал http: // localhost: 8000/admin_media/a.gif в URL-адресе broswer, и результат: Страница не найдена: f: \ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif –

2

Я просто исправил аналогичную ошибку на своем тестовом сайте. ADMIN_MEDIA_PREFIX и MEDIA_URL никогда не должны быть такими же, смотрите следующее примечание в docs:

Make sure to use a trailing slash, and to have this be different from the MEDIA_URL setting (since the same URL cannot be mapped onto two different sets of files).

32

Ваш ответ, что если ADMIN_MEDIA_PREFIX явно не задает домен команда runserver будет отбывать файлы администратора медиа из contrib.admin.

Я был сожжен этим магии поведение тоже. Был билет для этого (Ticket #8336), но дизайнерское решение заключалось в том, чтобы оставить удобство и путаницу, как есть.

Так служить ваш админ средства массовой информации (для использования Grappelli или любой другой кожи администратора, который вы хотите использовать) из ваших каталогов с runserver команды вы должны использовать что-то вроде:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/') 
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/') 
MEDIA_URL = '/site-media/' 
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/' 

Я надеюсь, что я воскрешал правильный вопрос здесь. Извиняюсь заранее.

+0

спасибо, я тоже сгорел на этом – orwellian

+0

Отлично. Спасибо за это. –

+3

Магическое удобство поведения. Спасибо, Django! Как насчет разумных значений по умолчанию в settings.py? (вздох) ... спасибо за этот Phoku! – Rich

3

Рекомендуется запускать сервер Dev немного по-другому [1] питон manage.py runserver mydomain.com:8000 --adminmedia =/путь/к/ваш/администратор/СМИ/

[ 1] http://code.google.com/p/django-grappelli/wiki/Installation

+2

Это должно быть специфичным для django-grappelli. С vanilla Django 1.2 я получаю 'error: no такой параметр: --adminmedia' –

+0

Нет, объяснение здесь [здесь] [1]:« Если приложение staticfiles contrib включено (по умолчанию в новых проектах), команда runerver будет override с собственной командой сервера запуска, которая не имеет опции --adminmedia из-за устаревания. " [1]: https://docs.djangoproject.com/en/dev/ref/django-admin/ – eedeep

1

С момента включения статических файлов в багажник (примерно 1,3, я считаю) магия ADMIN_MEDIA_PREFIX больше не используется.

В настоящее время сервер запуска использует ваш STATIC_URL + 'admin /'. Он тайно и молча перехватывает ваши запросы, игнорирует все ваши urlconf и пытается заставить вас сходить с ума.

+1

Я нашел обратное - с django 1.3, если у меня не было ADMIN_MEDIA_PREFIX = posixpath.join (STATIC_URL, "admin/») (т. е. если у меня просто не было установлен ADMIN_MEDIA_PREFIX), то сервер-победитель не правильно загрузил мои админ-файлы. – eedeep

0

Попробуйте использовать STATICFILES_DIRS, как удар

# 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. 
    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')), 
    ("css", os.path.join(STATIC_ROOT,'css').replace('\\','/')), 
    ("js",  os.path.join(STATIC_ROOT,'js').replace('\\','/')), 
) 

Есть GOODLUCK!

+1

STATICFILES_DIRS = ( ("media", os.path.join (STATIC_ROOT, 'media'). Replace ('\\', '/')), ) – HUHU

Смежные вопросы