jinja2逃脱了joinee中的角色

时间:2014-03-31 13:27:16

标签: python jinja2

我正在使用jinja2渲染模板。我有一个像

这样的清单
favorits = ['cho|colate', 'cookies', 'steak']

我希望将其呈现为

cho\|colate | cookies | steak

用于asciidoc处理。 如果'cho|colate'没有我希望用反斜杠转义的|,这将非常简单:

{{ favorits | join(' | ') }}

现在jinja2有一个replace()过滤器,可以在单个变量上正常工作,但不在列表上(它将列表拆分为单个字符)。以下是诀窍,但不是非常优雅也不是万无一失:

{{ favorits|join(' ===| ')|replace('|', '\|') |replace('===\|','|') }}

我想我可以通过用更不可能的字符串替换===来使更安全,但这仍然不是很优雅。有没有人知道如何改善这个?

1 个答案:

答案 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(' | ')}}

给出了所需的输出。