【问题标题】:Purpose of a Django template context object?Django 模板上下文对象的用途?
【发布时间】:2017-11-23 06:28:55
【问题描述】:

在我们的一个应用程序(运行 Django 1.8)中,我们倾向于通过将字典传递给 render() 函数的上下文参数并将它们作为视图的一部分返回来呈现模板。例如:

from django.views.generic import View

class HomePageView(View):

    def get(self, request, *args, **kwargs):
        context = {'foo': 'bar', 'foo2': 'bar2'}
        return render(request, "page.html", context)

现在我已经开始寻找它,我看到人们使用 Django“上下文”对象而不是字典的例子。

from django.views.generic import View
from django.template import Context

class HomePageView(View):

    def get(self, request, *args, **kwargs):
        context = Context()
        context['foo'] = 'bar'
        context['foo2'] = 'bar2'
        return render(request, "page.html", context)

文档显示此 Context 对象可以通过类似于字典的方式(弹出、复制、键分配等)进行交互,并且有一个 flatten() 方法可以让您将其与字典进行比较。 https://docs.djangoproject.com/en/1.8/ref/templates/api/#playing-with-context

我的问题是:我有什么理由想要使用 Context 对象而不是字典?如果有人想要轻松访问请求变量,我可以看到他们可能会发现 RequestContext 的子类很有用,但我认为我缺少上下文对象的实用程序。

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    Python 字典是已知键和变量值之间的映射。 Context() 类似于字典,但 Context() 提供了额外的功能。

    因此,在渲染模板时,您需要一个上下文。这可以是django.template.Context 的一个实例,但Django 还带有一个子类django.template.RequestContext,其行为略有不同。

    render() 快捷方式会创建一个 RequestContext,除非它显式传递了不同的上下文实例。

    [...]

    RequestContextcontext processors 是为了解决冗余问题而创建的。 Context processors 允许您指定在每个上下文中自动设置的多个变量,而无需在每个 render() 调用中指定变量。

    [...]

    • 请记住,TEMPLATE_CONTEXT_PROCESSORS(在设置中)中的任何上下文处理器都将在该设置文件提供的每个模板中可用。

    • 自定义上下文处理器可以存在于代码库中的任何位置。所有 Django 关心的是您的自定义上下文处理器由您的TEMPLATES 设置中的context_processors 选项指向,或者如果您直接使用它,则指向Enginecontext_processors 参数。话虽如此,惯例是将它们保存在您的应用或项目中名为 context_processors.py 的文件中。

    来源: 掌握 Django:核心。 Django 1.8LTS 完整指南

    更多信息:official documentation: RequestContext

    【讨论】:

    • 啊,我错过了文档中关于模板如何需要上下文对象的行,但是将字典传递给渲染函数实例化 RequestContext 对象作为快捷方式。很高兴知道,谢谢!
    猜你喜欢
    • 2022-01-18
    • 2011-01-30
    • 2012-07-08
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多