通过过滤渲染 jinja2 模板时包括和排除字符串输出



我正在尝试构造一个模板来支持特定控制台平台的配置行。

运行配置采用以下格式:

示例 1:

/settings/network_connections/ETH0/ipv4_mode=static
/settings/network_connections/ETH0/pv4_address=10.0.0.10
/settings/network_connections/ETH0/ipv4_bitmask=24 
/settings/network_connections/ETH0/ipv4_gateway=10.0.0.1

如果要配置上述以下行,请在前面加上"set"一词,如下所示:

示例 2:

set /settings/network_connections/ETH0/ipv4_mode=static
set /settings/network_connections/ETH0/pv4_address=10.0.0.10
set /settings/network_connections/ETH0/ipv4_bitmask=24 
set /settings/network_connections/ETH0/ipv4_gateway=10.0.0.1

在我的 jinja2 模板中,我有这样的东西:

例 3

{{ set| remediation }} /settings/network_connections/ETH0/ipv4_mode=static
{{ set| remediation }} /settings/network_connections/ETH0/pv4_address=10.0.0.10
{{ set| remediation }} /settings/network_connections/ETH0/ipv4_bitmask=24
{{ set| remediation }} /settings/network_connections/ETH0/ipv4_gateway=10.0.0.1

我希望能够呈现模板并能够输出我在示例 2 中拥有的内容(使用"set"(,以及使用布尔变量 (with_remediation( 输出为示例 1(没有"set"(的能力。如果为 True,则包含"set" - 否则排除"set"。在示例 3 中,"修正"是嵌入式自定义筛选器。

import jinja2
loader = jinja2.FileSystemLoader('/tmp')
env = jinja2.Environment(autoescape=True, loader=loader)
def remediation(input,with_remediation):
"""Custom filter"""
if(with_remediation):
return input
else:
return ""
env.filters['remediation'] = remediation
temp = env.get_template('template.jinja2')
temp.render(set="set")

但我不确定如何将变量"with_remediation"传递到函数修复中。

我已经尝试按照答案中提供的示例将自定义过滤器定义嵌入 jinja2 模板?

另外,我如何对其进行编码,以便"设置"可以是我想要的任何"字符串"?我必须在temp.render(set="set")行中包含我想使用的每个字符串吗?例如;temp.render(set="set", delete="delete",rename="rename")或者是否有更有效的方法来解决这个问题?

我能够通过这样做来解决它; 通过将with_remediation设置为 True 来输出"设置">

; 通过将with_remediation设置为 False 来输出"设置":

import jinja2
loader = jinja2.FileSystemLoader('/tmp')
env = jinja2.Environment(autoescape=True, loader=loader)
with_remediation = True
def remediation(input):
"""Custom filter"""
if(with_remediation):
return input
else:
return ''
env.filters['remediation'] = remediation
temp = env.get_template('template.jinja2')
temp.render(set='set')

模板:

{{ set | remediation }}/settings/network_connections/ETH0/ipv4_mode=static
{{ set | remediation }}/settings/network_connections/ETH0/pv4_address=10.0.0.10
{{ set | remediation }}/settings/network_connections/ETH0/ipv4_bitmask=24
{{ set | remediation }}/settings/network_connections/ETH0/ipv4_gateway=10.0.0.1

最新更新