首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从变量引用jinja2变量

从变量引用jinja2变量
EN

Stack Overflow用户
提问于 2015-07-30 08:16:26
回答 1查看 1.7K关注 0票数 0

我希望能够应用DRY,并且在构建jinja2模板时不必重复自己。因此,我希望能够从动态构造的变量名中引用jinja2模板中的变量,例如:

代码语言:javascript
复制
{% for a in [ 'a', 'b', 'c'] %}
{% set name = a + "_name" %}
{% set value = {{ name }} %}
hello there {{ value }}
{% endfor %}

jinja中的输入变量应该是

代码语言:javascript
复制
a_name = 1
b_name = 2
c_name = 3

我的结果就是

代码语言:javascript
复制
hello there 1
hello there 2
hello there 3

这个是可能的吗?

我知道我只需要将一个数据结构传入jinja2来做类似的事情,但是我不能随意修改模板中的内容。

EN

回答 1

Stack Overflow用户

发布于 2015-07-31 15:35:35

我从here那里得到了答案

基本上,定义一个contextfunction并在jinja代码中引用它:

代码语言:javascript
复制
from jinja2 import Environment, FileSystemLoader, contextfunction

j2_env = Environment( loader=FileSystemLoader(directory), trim_blocks=False )
this_template = j2_env.get_template( """
    {% for i in [ 'a', 'b', 'c'] %}
    hello there {{ context()[i+"_name"] }}
    {% endfor %}
""" )

@contextfunction
def get_context(c):
  return c
this_template.globals['context'] = get_context
this_template.render( **{ 'a_name': 1, 'b_name': 2, 'c_name': 3 } )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31713271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档