Django {{ MEDIA_URL }} пусто @DEPRECATED
Я ударился головой об этом в течение последних нескольких часов. Я не могу заставить {{ MEDIA_URL }} появиться
в settings.py
..
MEDIA_URL = 'http://10.10.0.106/ame/'
..
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.media",
)
..
на мой взгляд, у меня есть
from django.shortcuts import render_to_response, get_object_or_404
from ame.Question.models import Question
def latest(request):
Question_latest_ten = Question.objects.all().order_by('pub_date')[:10]
p = get_object_or_404(Question_latest_ten)
return render_to_response('Question/latest.html', {'latest': p})
тогда у меня есть base.html и Question/latest.html
{% extends 'base.html' %}
<img class="hl" src="{{ MEDIA_URL }}/images/avatar.jpg" /></a>
но MEDIA_URL показывается пустым, я думал, что это, как это должно работать, но, возможно, я ошибаюсь.
Обновление Последняя версия исправляет эти проблемы.
5 ответов
Добавление обработчика контекста медиа шаблона также делает работу
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.media",
"django.core.context_processors.static",
)
Вам нужно добавить RequestContext
в вашем render_to_response
для контекстных процессоров, которые будут обработаны.
В твоем случае:
from django.template.context import RequestContext
context = {'latest': p}
render_to_response('Question/latest.html',
context_instance=RequestContext(request, context))
Из документов:
context_instance
Экземпляр контекста для визуализации шаблона. По умолчанию шаблон будет отображаться с экземпляром Context (заполненным значениями из словаря). Если вам нужно использовать контекстные процессоры, вместо этого визуализируйте шаблон с экземпляром RequestContext.
Вы также можете использовать direct_to_template:
from django.views.generic.simple import direct_to_template
...
return direct_to_template(request, 'Question/latest.html', {'latest': p})
Обновление: для пользователей Django 1.10 и мультимедийные, и статические контекстные процессоры уже перемещены в django.template из django.core. Для получения дополнительной информации прочитайте следующую статью: https://docs.djangoproject.com/en/1.10/ref/templates/api/
В дополнение к приведенному выше вопросу может предложить вам взглянуть на применение фотолога. Это может помочь вам избежать прямых ссылок в файлах шаблонов и использовать вместо них объекты. f.ex.:
<img src="{{ artist.photo.get_face_photo_url }}" alt="{{ artist.photo.title }}"/>