Подтвердить что ты не робот

Django: просмотр мультимедийных файлов ADMIN

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

Ошибка при попытке доступа к localhost: 8000/media/a.gif выглядит следующим образом:

Страница не найдена: F:\Python25\Lib\сайт-пакеты\Джанго/вно/администратор/медиа\a.gif

Я помещал файлы мультимедиа администратора в каталог с именем "media", в то время как я помещал обычные медиафайлы в каталог с именем "static". Я тоже в 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")

Любые подсказки?

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

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

4b9b3361

Ответ 1

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

Надеюсь, что вернусь к правильному вопросу. Извиняюсь заранее.

Ответ 3

Попробуйте

(r '^ admin_media/(.*)', 'django.views.static.serve', {'document_root': 'django/contrib/admin/media/', 'show_indexes': True}),

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

ADMIN_MEDIA_PREFIX = '/admin_media/'

Ответ 4

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

Обязательно используйте конечную косую черту и чтобы это отличалось от MEDIA_URL (с того же URL-адреса не могут быть отображены на два разных наборов файлов).

Ответ 5

Попробуйте изменить:

ADMIN_MEDIA_PREFIX = '/static/media/'

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

Ответ 6

Так как включение staticfiles в trunk (примерно 1.3, я считаю), магия ADMIN_MEDIA_PREFIX больше не используется.

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

Ответ 7

Попробуйте использовать 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('\\','/')),
)

Будьте добрыми!