Django: 在上下文中自动导入 MEDIA_URL

2 投票
2 回答
585 浏览
提问于 2025-04-15 22:58

就像这里提到的那样,你可以在settings.py文件中设置一个叫做MEDIA_URL的变量(比如我把它指向了Amazon S3),然后在视图中通过{{ MEDIA_URL }}来使用这个变量。因为MEDIA_URL并不会自动出现在上下文中,所以你需要手动把它添加进去。例如,下面的代码可以这样做:

#views.py

from django.shortcuts import render_to_response
from django.template import RequestContext

def test(request):
    return render_to_response('test.html', {}, context_instance=RequestContext(request))

这意味着在每个view.py文件中,我都需要添加from django.template import RequestContext,而在每个响应中,我还得明确指定context_instance=RequestContext(request)

有没有办法可以自动(保持代码简洁)把MEDIA_URL添加到默认的上下文中呢?提前谢谢!

2 个回答

0

在你的设置文件中,把 "django.core.context_processors.media" 加到 TEMPLATE_CONTEXT_PROCESSORS 里。

3

这里有一个通用的视图可以用来解决这个问题:

direct_to_template(request, template, extra_context=None, mimetype=None, **kwargs)

我觉得它的文档写得不太好(因为没有说明它使用了一个 RequestContext),所以我建议你去看看它的实现:

http://code.djangoproject.com/browser/django/trunk/django/views/generic/simple.py

我觉得这就是你想要的东西……

撰写回答