这些功能不应该完全相同吗?
def IndexView(request):
return direct_to_template(request, template='index.html')
def IndexView2(request):
return render_to_response('index.html',
{'request': request},
context_instance=RequestContext(request))
我不是在问两者之间的区别,但为什么在模板上我使用direct_to_template时不能使用{{request}} ... 我读了很多类似的问题,但我无法理解。
有谁知道为什么?谢谢,
答案 0 :(得分:2)
原因是direct_to_template
默认情况下实际使用RequestContext(request)
(与所有通用视图一样),这意味着模板中的所有模板上下文处理器都可用(包括django.core.context_processors.request
是request
变量可访问的原因。
当您使用RequestContext
时,它会扫描所有模板上下文处理器(如TEMPLATE_CONTEXT_PROCESSORS
in your settings.py中所定义)并自动将它们添加到上下文中,以便它们在您的模板中可用。来自文档:
第二个区别是它会根据您的TEMPLATE_CONTEXT_PROCESSORS设置自动使用一些变量填充上下文。
答案 1 :(得分:-1)
您需要将django.core.context_processors.request添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS。