在这里,我尝试回到这个例子:
Embed custom filter definition into jinja2 template?
但我不想使用大写字符串,而是希望使用布尔标志
在我的jinja2模板中,我希望如下所示:
{{ set | remediate }} /etc/network/interfaces
如果修正标志设置为false,我希望它打印“set”。渲染时,预期输出为:
set /etc/network/interfaces
如果“修正”标志设置为true,则在渲染时不会打印“设置”:
/etc/network/interfaces
使用链接中的示例,是否有一种方法可以将布尔标志传递到函数中,以便当我使用env.filters['remediate'] = remediate
定义它时,它将确定在渲染时是否输出“set”
渲染配置.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
我设法编写了一个适合我的解决方案。我在上面的链接中使用了与示例相同的概念,但进行了修改以计算布尔标志:
在我的Jinja2模板文件中,我有这样的东西
如果某个函数正在调用模板的呈现过程,则布尔标志可以设置为True或False,具体取决于您试图实现的目标。在我的特殊情况下,上面的模板引用了一些与网络设备相关的配置。显示配置时,“设置”字符串不存在。但是,要配置该行,必须包括“set”。两种不同的功能,两种不同的用途,使用一个模板
在render()函数中,您将有如下内容:
这是为了让Jinja2知道传递到remediate的值“set”等于字符串“set”
相关问题 更多 >
编程相关推荐