模板上的direct_to_template和render_to_response - {{request}}

时间:2012-08-16 23:32:45

标签: django templates django-generic-views

这些功能不应该完全相同吗?

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}} ... 我读了很多类似的问题,但我无法理解。

有谁知道为什么?谢谢,

2 个答案:

答案 0 :(得分:2)

原因是direct_to_template默认情况下实际使用RequestContext(request)(与所有通用视图一样),这意味着模板中的所有模板上下文处理器都可用(包括django.core.context_processors.requestrequest变量可访问的原因。

当您使用RequestContext时,它会扫描所有模板上下文处理器(如TEMPLATE_CONTEXT_PROCESSORS in your settings.py中所定义)并自动将它们添加到上下文中,以便它们在您的模板中可用。来自文档:

  

第二个区别是它会根据您的TEMPLATE_CONTEXT_PROCESSORS设置自动使用一些变量填充上下文。

答案 1 :(得分:-1)

您需要将django.core.context_processors.request添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS。