python - Jinja2:自定义过滤器布尔标志
问题描述
我试图在这里跟进这个例子:
但我不想做上弦,而是做一个布尔标志。
在我的 jinja2 模板中,我想要这样的东西:
{{ set | remediate }} /etc/network/interfaces
如果修复标志设置为 false,我希望它打印“设置”。当我渲染时,预期的输出是:
set /etc/network/interfaces
如果修复标志设置为 true,则渲染时不会打印“设置”:
/etc/network/interfaces
使用链接中的示例,有没有一种方法可以将布尔标志传递给函数,以便当我使用env.filters['remediate'] = remediate
它定义它时,它将确定渲染时是否输出“设置”?
渲染配置.py
from render import render
def main():
flag = False
render(flag)
渲染.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
解决方案
我设法编写了一个对我有用的解决方案。我使用了上面链接示例中的相同概念,但修改为评估布尔标志:
def remediate(input):
"""Custom filter"""
if with_remediate == True:
return input
else:
return ''
在我的 Jinja2 模板文件中,我有这样的东西..
{{ set | remediate }} /etc/network/interfaces
如果某个函数正在调用模板的渲染过程,则布尔标志可以设置为 True 或 False - 取决于您要实现的目标。在我的特殊情况下,上面的模板是指与网络设备相关的一些配置。显示配置时,'set' 字符串不存在。但是,要配置该行,必须包含“set”。两种不同的功能,两种不同的用途,一种模板。
在您的 render() 函数中,您将拥有如下内容:
config = baseline.render(set = 'set ')
这是为了让 Jinja2 知道传递给 remediate 的值 'set' 等于字符串 'set'。
推荐阅读
- python - 将链接注释添加到 PDF 文档
- laravel - Laravel Mix Vue 3 - 无法编译“TypeError:无法读取未定义的属性'resolve'”
- python - 坚持为什么图像没有加载到 tkinter 画布中
- reactjs - 如何删除或更改 ant design table 行悬停的颜色?
- java - 如何在 Android 系统时钟滴答声时准确更新屏幕倒计时
- reactjs - 一起 React Redux 和 Context api
- node.js - Discord.js V12 Sending an embed to a channel in a different guild
- android - Flutter json和图表
- r - 只为矩阵 R 分配一个名称
- html - 无论如何要使用弹性仪表板填充图表区域上的空间?每个图表区域有两个输出?