gpt4 book ai didi

python - Django 模板上下文对象的用途?

转载 作者:行者123 更新时间:2023-11-28 20:36:42 25 4
gpt4 key购买 nike

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

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 字典是已知键和变量值之间的映射。 Context()类似于字典,但是一个Context()提供额外的功能。

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

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

[...]

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

[...]

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

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

来源: 精通 Django:核心。 Django 1.8LTS 完整指南

更多信息:official documentation: RequestContext

关于python - Django 模板上下文对象的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44657672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com