33

在过去的几个小时里,我一直在努力解决这个问题。我无法显示 {{ 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 显示为空白,我认为这就是它的工作方式,但也许我错了。

更新 最新版本修复了这些问题。

4

5 回答 5

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))

文档

上下文实例

渲染模板的上下文实例。默认情况下,模板将使用 Context 实例(填充字典中的值)呈现。如果您需要使用上下文处理器,请改为使用 RequestContext 实例呈现模板。

于 2010-09-21T02:12:29.810 回答
24

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

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
)
于 2014-04-30T19:11:56.067 回答
2

您还可以使用 direct_to_template:

from django.views.generic.simple import direct_to_template
...
return direct_to_template(request, 'Question/latest.html', {'latest': p})
于 2010-09-21T13:02:06.753 回答
2

除了上面提供的问题,可以建议你看看photologue应用程序。它可以帮助您避免模板文件中的直接链接,而是使用对象。例如:

<img src="{{ artist.photo.get_face_photo_url }}" alt="{{ artist.photo.title }}"/>
于 2010-09-21T14:00:00.130 回答
2

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

于 2017-03-18T18:32:53.813 回答