Django {{MEDIA_URL}} пусто @DEPRECATED - PullRequest
       17

Django {{MEDIA_URL}} пусто @DEPRECATED

32 голосов
/ 21 сентября 2010

Я ударился головой об это последние несколько часов.Я не могу заставить {{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})

, тогда у меня есть база.html и Question / latest.html

{% extends 'base.html' %}
<img class="hl" src="{{ MEDIA_URL }}/images/avatar.jpg" /></a>

, но MEDIA_URL отображается пустым, я подумал, что так оно и должно работать, но, возможно, я не прав.* Последняя версия исправляет эти проблемы.

Ответы [ 5 ]

30 голосов
/ 21 сентября 2010

Вам необходимо добавить 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.

22 голосов
/ 30 апреля 2014

Добавление обработчика контекста медиа шаблона также выполняет свою работу

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
)
2 голосов
/ 18 марта 2017

Обновление: для пользователей Django 1.10 и мультимедийные, и статические контекстные процессоры уже перемещены в django.template из django.core. Для получения дополнительной информации прочитайте следующую статью: https://docs.djangoproject.com/en/1.10/ref/templates/api/#django-template-context-processors-media

2 голосов
/ 21 сентября 2010

В дополнение к приведенному выше вопросу может предложить вам посмотреть фотолог приложение. Это может помочь вам избежать прямых ссылок в файлах шаблонов и использовать вместо них объекты. F.ex.:

<img src="{{ artist.photo.get_face_photo_url }}" alt="{{ artist.photo.title }}"/>
2 голосов
/ 21 сентября 2010

Вы также можете использовать direct_to_template:

from django.views.generic.simple import direct_to_template
...
return direct_to_template(request, 'Question/latest.html', {'latest': p})
...