2014-03-31 35 views
2

我正在與jinja2呈現模板。我有一個像jinja2逃生加入字符在joinee

favorits = ['cho|colate', 'cookies', 'steak'] 

名單,我想呈現爲

cho\|colate | cookies | steak 

爲asciidoc處理。 如果'cho|colate「沒有,我想用一個反斜槓逃脫|,那將是非常容易的:

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

現在的Jinja2有replace()過濾器,它在單個變量上工作正常,但不能在列表(它將列表拆分爲單個字符)。以下是卓有成效的,但也不是很高貴,也沒有萬無一失:

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

我想我可以使它安全通過用更不可能串置換===,但仍然不是很優雅。有沒有人有關於如何改善這個問題的想法?

回答

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

這給所需的輸出。