Django {{MEDIA_URL}}空白@DEPRECATED

时间:2010-09-21 02:09:37

标签: django django-templates media-url

在过去的几个小时里,我已经对此大打折扣。 我无法显示{{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 个答案:

答案 0 :(得分:30)

您需要在RequestContext中添加render_to_response,以便处理上下文处理器。

在你的情况下:

from django.template.context import RequestContext

context = {'latest': p}
render_to_response('Question/latest.html',
                   context_instance=RequestContext(request, context))

来自docs

  

<强> context_instance

     

上下文实例   用它来渲染模板。通过   默认情况下,将呈现模板   使用Context实例(填充   来自字典的价值观)。如果你需要   使用上下文处理器,渲染   带有RequestContext的模板   实例而不是。

答案 1 :(得分:22)

添加媒体模板上下文处理器也可以完成工作

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 :(得分:2)

您也可以使用direct_to_template:

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

答案 3 :(得分:2)

除了上面提供的问题,建议您查看photologue申请。它可以帮助您避免模板文件中的直接链接并改为使用对象。 F.ex:

<img src="{{ artist.photo.get_face_photo_url }}" alt="{{ artist.photo.title }}"/>

答案 4 :(得分:2)

更新:对于Django 1.10用户,媒体和静态上下文处理器已经从django.core移动到django.template中阅读以下文章以获取更多信息:https://docs.djangoproject.com/en/1.10/ref/templates/api/#django-template-context-processors-media