jinja2 模板可以访问(和修改)全局 python 脚本变量吗?
Can jinja2 templates access (and modify) global python script variables?
我想使用 python 和 jinja2 创建特定的文本文件结构。 (不是 HTML)。这些文件是静态的,由多个段组成,每个段由不同的 jinja 模板创建。
这些以随机顺序出现的每个片段都必须按顺序编号。
原则上:
Segment A (no 1)
---
My Segment B (no 2)
---
Another Segment C (no 3)
我使用 python 中的变量跟踪当前号码。
我当然可以把这个变量传递给每个模板,像这样。
outfile=[] # array for output
# get some objects...
for i in range(1,5): # example to test
t=myTemplate.render(nr=i, mystring=f"This is template nr {i}")
outfile.append(t)
为了清楚和简单起见,我想避免将 global/s(可能还有更多)转移到每个模板渲染调用。
我需要查找的是 Jinja2 全局名称空间吗?
您可以修改 Jinja2 环境来定义全局变量,这些变量稍后可以被该环境中的任何模板访问,如下所示:
(使用 Flask 应用程序制作的示例 - 其他运行时可能意味着访问环境的不同方式)
app.jinja_env.globals['varName'] = 'variableValue'
这让您可以像访问变量一样访问变量 render_template
return render_template("template.html", varName = 'variableValue')
这是一个答案,因为评论不允许格式化。
以下结束作业。
我的模板:
; ------- text object ---------
TESTER: {{tester}} # as explained by matszwecja #
我的脚本:
import jinja2
templateLoader = jinja2.FileSystemLoader(searchpath="./templates")
templateEnv = jinja2.Environment(loader=templateLoader, newline_sequence='\r\n')
templateEnv.globals['tester'] = '12345' # test for global stuff
Tobj_text=templateEnv.get_template('obj_text')
t=Tobj_text.render()
print (t)
我想使用 python 和 jinja2 创建特定的文本文件结构。 (不是 HTML)。这些文件是静态的,由多个段组成,每个段由不同的 jinja 模板创建。
这些以随机顺序出现的每个片段都必须按顺序编号。
原则上:
Segment A (no 1)
---
My Segment B (no 2)
---
Another Segment C (no 3)
我使用 python 中的变量跟踪当前号码。
我当然可以把这个变量传递给每个模板,像这样。
outfile=[] # array for output
# get some objects...
for i in range(1,5): # example to test
t=myTemplate.render(nr=i, mystring=f"This is template nr {i}")
outfile.append(t)
为了清楚和简单起见,我想避免将 global/s(可能还有更多)转移到每个模板渲染调用。
我需要查找的是 Jinja2 全局名称空间吗?
您可以修改 Jinja2 环境来定义全局变量,这些变量稍后可以被该环境中的任何模板访问,如下所示: (使用 Flask 应用程序制作的示例 - 其他运行时可能意味着访问环境的不同方式)
app.jinja_env.globals['varName'] = 'variableValue'
这让您可以像访问变量一样访问变量 render_template
return render_template("template.html", varName = 'variableValue')
这是一个答案,因为评论不允许格式化。
以下结束作业。
我的模板:
; ------- text object ---------
TESTER: {{tester}} # as explained by matszwecja #
我的脚本:
import jinja2
templateLoader = jinja2.FileSystemLoader(searchpath="./templates")
templateEnv = jinja2.Environment(loader=templateLoader, newline_sequence='\r\n')
templateEnv.globals['tester'] = '12345' # test for global stuff
Tobj_text=templateEnv.get_template('obj_text')
t=Tobj_text.render()
print (t)