Django:在渲染快捷方式功能中使用了context_instance参数是什么?

时间:2011-10-26 23:40:47

标签: django django-views

Documentation on 'Render' shortcut

根据上面的链接, context_instance 参数定义为

  

用于呈现模板的上下文实例。默认情况下,模板将使用RequestContext实例呈现(填充来自请求和字典的值)。

考虑到这个定义,我没有看到任何可以从提供context_instance参数中受益的场景。我的意思是如果我需要提供额外的上下文值,我只需将它们添加到字典参数中。我不知道context_instance如何有用。请教育我。感谢。

3 个答案:

答案 0 :(得分:12)

主要方案是在模板中提供某些变量。例如,auth上下文处理器(以及其他)可以在模板中使用user变量,这样您就不必自己传递它。虽然它是一个相当大的段落,Django documentation在解释它时做得非常好。

简而言之:通过在context_instance=RequestContext(request)电话中添加render,您的settings.pyTEMPLATE_CONTEXT_PROCESSORS变量下)中定义的所有处理器都会按顺序执行。这些处理器中的每一个都返回dict,其中包含模板中可用的变量。使用默认设置,这意味着您不必添加例如自己的usercsrfmessages变量:这是由处理器完成的。

自己的上下文处理器的一个示例是将主菜单参数添加到模板中。假设您要突出显示用户正在查看的当前类别的菜单:通过创建自己的上下文处理器来确定当前位置,它可以在模板中添加一些变量,这些变量由菜单用于突出显示。

答案 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)

我可以想到两件事:

  1. 向后兼容性。您可以安全地将所有引用从render_to_response更改为render

  2. 您不希望为该特定视图运行上下文处理器,您可以在None中传入context_instance(节省一些开销。)