我正在尝试在此跟踪此示例:
Embed custom filter definition into jinja2 template?
但我不想做大写字母,而是想做一个布尔标志。
在我的jinja2模板中,我想要这样的东西:
{{ set | remediate }} /etc/network/interfaces
如果补救标志设置为false,我希望它打印“ set”。当我渲染时,预期的输出是:
set /etc/network/interfaces
如果补救标志设置为true,则在渲染时将不会打印“ set”:
/etc/network/interfaces
使用链接中的示例,是否可以将布尔值标志传递给函数,以便在我使用env.filters['remediate'] = remediate
进行定义时,它将确定在渲染时是否输出“ set”?
render_config.py
from render import render
def main():
flag = False
render(flag)
render.py
def render(flag):
import jinja2
loader = jinja2.FileSystemLoader('/tmp')
env = jinja2.Environment(autoescape=True, loader=loader)
env.filters['remediate'] = remediate
temp = env.get_template('test.jinja2')
temp.render(set='set')
def remediate(flag):
"""Custom filter"""
return flag
答案 0 :(得分:1)
我设法编写了一个对我有用的解决方案。我在上面的链接中使用了与示例相同的概念,但对其进行了修改以评估布尔标志:
def remediate(input):
"""Custom filter"""
if with_remediate == True:
return input
else:
return ''
在Jinja2模板文件中,我有类似的内容。
{{ set | remediate }} /etc/network/interfaces
如果某个函数正在调用模板的呈现过程,则布尔标志可以设置为True或False-取决于您要实现的目标。在我的特定情况下,上面的模板引用了一些与网络设备相关的配置。显示配置时,不存在“设置”字符串。但是,要配置该行,必须包括“设置”。两种不同的功能,两种不同的用途,使用一种模板。
在您的render()函数中,您将具有以下内容:
config = baseline.render(set = 'set ')
这是为了让Jinja2知道传递给补救的值'set'等于字符串'set'。