目前,由于我想访问所有模板中的user
信息,因此我始终在所有视图中使用context_instance = RequestContext( request )
。我也喜欢RequestContext
,因为它会自动处理csrf
。
现在我通常只将我的所有字典值放在RequestContext
中以像这样呈现
request_context = RequestContext( request, {
'order' : order,
'order_comments' : order_comments,
'comment_form' : comment_form,
} )
return render_to_response( 'doors/orders/detail.html', context_instance = request_context )
这与此有什么不同?
context = {
'order' : order,
'order_comments' : order_comments,
'comment_form' : comment_form,
}
return render_to_response( 'doors/orders/detail.html', context, context_instance = RequestContext( request ) )
如果在程序方面没有真正的差异,那么这是最佳实践还是首选方法?
答案 0 :(得分:6)
主要没有区别。
在第二个示例中,context参数更新了context_instance,但是它本身是空白的,因此这些示例之间最终没有区别。
这是来源......
if not context_instance:
return t.render(Context(dictionary))
# Add the dictionary to the context stack, ensuring it gets removed again
# to keep the context_instance in the same state it started in.
context_instance.update(dictionary)
我首选的方法是使用1.3+的render
快捷方式而不是render_to_response
快捷方式,因为对于我的模板渲染的绝大部分,我都使用RequestContext
。
from django.shortcuts import render_to_response, render
render(request, 'mytemplate.html', {'foo': 'bar'}) # automatically uses RequestContext
# vs
render_to_response('mytemplate.html', {'foo': 'bar'}, context_instance=RequestContext(request))