我正在使用jinja2渲染模板。我有一个像
这样的清单favorits = ['cho|colate', 'cookies', 'steak']
我希望将其呈现为
cho\|colate | cookies | steak
用于asciidoc处理。
如果'cho|colate
'没有我希望用反斜杠转义的|
,这将非常简单:
{{ favorits | join(' | ') }}
现在jinja2有一个replace()
过滤器,可以在单个变量上正常工作,但不在列表上(它将列表拆分为单个字符)。以下是诀窍,但不是非常优雅也不是万无一失:
{{ favorits|join(' ===| ')|replace('|', '\|') |replace('===\|','|') }}
我想我可以通过用更不可能的字符串替换===
来使更安全,但这仍然不是很优雅。有没有人知道如何改善这个?
答案 0 :(得分:0)
所以,解决方案非常简单:custom filters。就我而言,这段代码
import jinja2
def list_replace(a_list,search,replace):
new_list=[]
for item in a_list:
new_list.append(item.replace(search,replace))
return new_list
templateLoader = jinja2.FileSystemLoader( searchpath="/" )
templateEnv = jinja2.Environment( loader=templateLoader )
templateEnv.filters['list_replace'] = list_replace
让我在我的模板中做更清洁的事情:
{{ favorits|list_replace('|', '\|')|join(' | ')}}
给出了所需的输出。