Documentation on 'Render' shortcut
根据上面的链接, context_instance 参数定义为
用于呈现模板的上下文实例。默认情况下,模板将使用RequestContext实例呈现(填充来自请求和字典的值)。
考虑到这个定义,我没有看到任何可以从提供context_instance参数中受益的场景。我的意思是如果我需要提供额外的上下文值,我只需将它们添加到字典参数中。我不知道context_instance如何有用。请教育我。感谢。
答案 0 :(得分:12)
主要方案是在模板中提供某些变量。例如,auth
上下文处理器(以及其他)可以在模板中使用user
变量,这样您就不必自己传递它。虽然它是一个相当大的段落,Django documentation在解释它时做得非常好。
简而言之:通过在context_instance=RequestContext(request)
电话中添加render
,您的settings.py
(TEMPLATE_CONTEXT_PROCESSORS
变量下)中定义的所有处理器都会按顺序执行。这些处理器中的每一个都返回dict
,其中包含模板中可用的变量。使用默认设置,这意味着您不必添加例如自己的user
,csrf
或messages
变量:这是由处理器完成的。
自己的上下文处理器的一个示例是将主菜单参数添加到模板中。假设您要突出显示用户正在查看的当前类别的菜单:通过创建自己的上下文处理器来确定当前位置,它可以在模板中添加一些变量,这些变量由菜单用于突出显示。
答案 1 :(得分:9)
现在,Django 1.8中不再使用上下文实例,并且字典已重命名为上下文。
在Django 1.8中更改:
上下文参数曾被称为字典。该名称在Django 1.8中已弃用,将在Django 2.0中删除。自1.8版以来已弃用:
不推荐使用context_instance参数。只需使用上下文。
因此,如果你使用的是更新版本的Django,你对Render函数的调用应该是:
from django.shortcuts import render
def my_view(request):
# View code here...
return render(request, 'myapp/index.html', {"foo": "bar"},
content_type="application/xhtml+xml")
{"foo": "bar"}
是您的背景。缺少的context_instance
是(我推测)现在默认创建并填充了您请求的必需上下文。
答案 2 :(得分:3)
我可以想到两件事:
向后兼容性。您可以安全地将所有引用从render_to_response
更改为render
。
您不希望为该特定视图运行上下文处理器,您可以在None
中传入context_instance
(节省一些开销。)