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

tam*_*are 14 django django-views

"渲染"快捷方式的文档

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

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

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

jro*_*jro 12

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

简而言之:通过添加context_instance=RequestContext(request)到您的render调用中,您settings.py(在TEMPLATE_CONTEXT_PROCESSORS变量下)中定义的所有处理器都按顺序执行.这些处理器中的每一个都返回dict带有模板中可用变量的变量.使用默认设置,这意味着你不必添加例如user,csrf或者messages自己变量:这是由处理器来完成.

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

  • 但是正如文档所说,默认情况下,模板已经被呈现给RequestContext,因此这将不必要地设置在调用中自动设置的相同内容. (2认同)

Pur*_*ret 9

现在,Django 1.8中不推荐使用Context实例,并且已将字典重命名为context.

在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")
Run Code Online (Sandbox Code Playgroud)

{"foo": "bar"}你的背景在哪里?缺少的context_instance是(我推测)现在默认创建并填充了您的请求所需的上下文.