Сервер разработки Django: шаблоны визуализируются из пользовательских представлений без статического носителя - PullRequest
0 голосов
/ 06 октября 2010

У меня есть сервер разработки, работающий (и обслуживающий контент) с использованием встроенного сервера django. Все мои шаблоны, которые отображаются из общих представлений, правильно указывают на статические медиа-файлы (css / java / imgs), но те, которые отображаются с помощью пользовательских представлений, похоже, не добавляют папку / media / к URL-адресам. (По крайней мере, это кажется проблемой)

В моих настройках у меня есть:

DJANGO_PATH = os.path.realpath(os.path.dirname(__file__))
DB_PATH = os.path.join( (os.path.split(DJANGO_PATH))[0] , 'db/dev.db')
TEMPLATE_PATH = os.path.join( DJANGO_PATH , 'templates')
DEBUG = True
TEMPLATE_DEBUG = DEBUG

MEDIA_PATH = os.path.join( (os.path.split(DJANGO_PATH))[0] , 'media')
ADMIN_MEDIA_PREFIX = '/media/admin/'
MEDIA_URL = '/media/'
MEDIA_ROOT = MEDIA_PATH

и в моих URL-адресах у меня есть запись

(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True }),

У кого-нибудь есть идеи?

EDIT:
Упс, забыл упомянуть. Все мои шаблоны наследуются от базового шаблона, который содержит все медиа-файлы, такие как:

{{ MEDIA_URL }}css/some/file.css

Итак, в моей папке шаблонов у меня есть:

/templates/base.html
/templates/someapp/childtemplate.html

со всеми css / js в заголовке, как указано выше. Затем в шаблонах, специфичных для моего приложения, я просто наследую базовый шаблон

* ** тысяча двадцать-один 1 022 * * Более 1 023 *
Я могу просмотреть СМИ, посетив
localhost:8000/media/  

нет проблем, поэтому urlCONF, кажется, делает свою работу

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

Убедитесь, что django.core.context_processors.media находится в вашей переменной TEMPLATE_CONTEXT_PROCESSORS в settings.py. Это позволяет использовать {{ MEDIA_URL }} в ваших шаблонах.

Редактировать: Как отметил Дэниел, я забыл упомянуть, что да, чтобы воспользоваться вашим TEMPLATE_CONTEXT_PROCESSORS, вам нужно передать context_instance=RequestContext(request) в функцию render_to_response, на ваш взгляд. Некоторые альтернативы необходимости делать это для каждого представления - использовать декоратор render_to() в стороннем приложении django-annoying или просто импортировать и использовать direct_to_template вместо render_to_response, что является изящным приемом в этом он автоматически использует RequestContext.

1 голос
/ 06 октября 2010

Если я не ошибаюсь, MEDIA_URL по умолчанию недоступен из контекста шаблона.Самый простой обходной путь - создать новый процессор контекста шаблона:

def media_url(request):
    from django.conf import settings
    return {'media_url': settings.MEDIA_URL} 

И в settings.py:

TEMPLATE_CONTEXT_PROCESSORS = ('myapp.context_processors.media_url',)

Просто не забудьте использовать RequestContext при рендеринге шаблона.В представлении:

from django.template import RequestContext
return render_to_response("my_app/my_template.html", {'some_var': 'foo'}, context_instance=RequestContext(request))

Теперь ваши шаблоны должны отображаться правильно.

Подробнее об этом: http://www.b -list.org / weblog / 2006 / jun / 14 /Джанго-советы-шаблон-контекстные процессоры /

...