Jinja2 中的上下文是啥?

Posted

技术标签:

【中文标题】Jinja2 中的上下文是啥?【英文标题】:What is context in Jinja2?Jinja2 中的上下文是什么? 【发布时间】:2021-01-16 20:15:33 【问题描述】:

jinja_code.py

import jinja2
env=jinja2.Environment(loader=FileSystemLoader(searchpath="./"))
template=env.get_template('file.j2')
render_template=template.render(test1="TEST1",test2="TEST2")
print(render_template)

文件.j2

 context.test1  

我正在学习 Jinja2,我知道上下文是传递给 Template 的变量,但是当我执行上面的代码时,我得到了以下错误

jinja2.exceptions.undefinederror: 'context' is not defined

我已阅读文档,但无法完全理解。您能否解释一下什么是上下文以及如何使用它来访问变量?

【问题讨论】:

在没有上下文的情况下尝试test1 是的,我知道这行得通。但是我看到了一个代码,用户只是写了 % set name = context.FirstName %。所以我很困惑这个上下文是从哪里加载的? 【参考方案1】:

上下文包含您在模板渲染时要注入的动态内容。

在您的示例中,文件 file.j2 必须具有以下内容:

 test1  

因为上下文不是一个变量,而是你传递给模板的所有变量的集合。 test1test2 是上下文的一部分。

【讨论】:

但是我看到了一个代码,用户只写了 % set name = context.FirstName %。那你能解释一下如何处理吗? 如果你需要使用 context.test1 ,你需要通过以下方式将它作为一个dict传递给你的模板:render_template=template.render(context="test1": "TEST1","test2":"TEST2")

以上是关于Jinja2 中的上下文是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jinja2 中显示上下文对象的字符串表示形式?

Android中的“上下文”是啥意思? [复制]

Django 中的上下文是啥?

Java中的上下文到底是啥? [复制]

Java中的上下文到底是啥? [复制]

_.each(list, iterator, [context]) 中的上下文是啥?