4
擁有autoescape屬性(我想保持這種方式),我希望用戶能夠輸入一些自定義標記,以便有機會格式化文本。例如,[s][/s]
將被翻譯爲<strong></strong>
。我相信正確的做法是編寫自定義的Jinja2過濾器。但下面不工作:Jinja2過濾器將自定義標記轉換爲html
@app.template_filter()
@evalcontextfilter
def mark2html(eval_ctx, value):
result = escape(value).replace('[s]','<strong>')
if eval_ctx.autoescape:
result = Markup(result)
return result
在申請時[s]
在字符串中遇到的,存儲在custom_markup_text文本像
<div>{{ custom_markup_text|mark2html }}</div>
,應該轉化爲<strong>
標籤。 AFAIK,標記()函數確保我們信任這個特定的字符串,以便HTML不會在那裏轉義。該過濾器已成功應用,[s]
被替換爲<strong>
,但它仍然逃脫。
很明顯,自動轉義完成後此自定義過濾器。另一方面,來自Jinja2文檔的示例過濾器完美地工作:
@app.template_filter()
@evalcontextfilter
def nl2br(eval_ctx, value):
result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n') \
for p in _paragraph_re.split(escape(value)))
if eval_ctx.autoescape:
result = Markup(result)
return result
我在做什麼錯了?
背後的[概念](http://jinja.pocoo.org/docs/dev/api/#custom-filters)。它基於的[snippet](http://flask.pocoo.org/snippets/28/)。如何[在模板內調用](http://stackoverflow.com/a/14595911/1599229)。 – bahmait