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

18

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

Ошибка при попытке доступа к localhost: 8000 / media / a.gif:

Страница не найдена: f: \ python25 \ lib \ site-packages \ django / contrib / admin / media \ 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)

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

Ты когда-нибудь разрешал это? У меня похожий опыт работы на Mac с Django 1.1, обслуживание обычных медиафайлов работает, но не для администратора ... Danielb
Причина, по которой настройки URL не работают, заключается в том, чтоdjango/core/management/commands/runserver.py вместе сdjango.core.servers.basehttp настроить обработчик WSGI дляADMIN_MEDIA_PREFIX. Он обрабатывает запрос до нажатия URLconf vdboor

Ваш Ответ

7   ответов
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/'

Надеюсь, я воскресил здесь правильный вопрос. Заранее извиняюсь.

спасибо, я тоже обгорел на этом orwellian
Отлично. Спасибо за это Honza Pokorny
Магическое удобное поведение. Спасибо, Джанго! Как насчет разумных значений по умолчанию в settings.py? (вздыхает) ... спасибо за это Фоку! Rich
Я думаю, что в их решении есть какая-то логика, поскольку, возможно, большинство пользователей не меняются, и уже есть так много настроек, о которых нужно позаботиться. Как новичок, такие удобства приятно иметь. Sam Stoelinga
"Волшебство" - это более умный обходной путь, оно ограничиваетpath.startswith(base_url) регистрироватьсяAdminMediaHandler._should_handle(). Следовательно, вы пропускаете обработчик WSGI и вводите обычный URLconf:) vdboor
3

n manage.py runserver mydomain.com:8000 --adminmedia = / path / to / your / admin / media /

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

Это должно быть специфично для Джанго-Граппелли. С ванильным Django 1.2 я получаюerror: no such option: --adminmedia Vebjorn Ljosa
Нет, объяснение есть [здесь] [1]: «Если приложение contrib статических файлов включено (по умолчанию в новых проектах), команда runserver будет переопределена собственной командой runserver, у которой нет опции --adminmedia из-за Устаревшая «. [1]: Docs.djangoproject.com / ен / DEV / исх / Джанго-админ eedeep
2

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

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

ADMIN_MEDIA_PREFIX = '/admin_media/'
спасибо за ответ, но он все еще не работает :) Я набралlocalhost: 8000 / admin_media / a.gif в URL-адресе обозревателя, в результате чего страница не найдена: f: \ python25 \ lib \ site-packages \ django / contrib / admin / media \ a.gif Adrian Liem
2

DIA_PREFIX и MEDIA_URL никогда не должны совпадать, см. Следующее примечание в @ Докумен:

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

1

ADMIN_MEDIA_PREFIX = '/static/media/'

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

спасибо за ответ, но он все еще не работает :) Я набралlocalhost: 8000 / статический / СМИ / a.gif в URL-адресе обозревателя, в результате чего страница не найдена: f: \ python25 \ lib \ site-packages \ django / contrib / admin / media \ a.gif Adrian Liem
Я думаю, что я попробую воссоздать проект с нуля, используя обычные примеры администрирования СМИ :) спасибо за ответы Adrian Liem
1

3, я полагаю) магия ADMIN_MEDIA_PREFIX больше не используется.

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

Я обнаружил обратное - с django 1.3, если у меня не было ADMIN_MEDIA_PREFIX = posixpath.join (STATIC_URL, "admin /") (т. Е. Если у меня просто не было ADMIN_MEDIA_PREFIX), тогда runserver не обслуживал мой Администратор СМИ правильно. 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('\\','/')),
)

Удачи

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

Похожие вопросы