为Jinja2定制自动转义。
jinja-vanish的Python项目详细描述
使用Jinja2-模板输出非html内容时,自动转义无法 因为它是硬编码的,可以与HTMLescape函数和 MarkupSafe的标记对象。
通过重写 escape函数在使用扩展的 代码生成器并替换内置筛选器|e和|escape。用法 很简单,下面是一个使用psycopg2的mogrify() 用于转义Postgres的SQL的函数:
fromdatetimeimportdatetimefromjinja_vanishimportDynAutoEscapeEnvironment,markup_escape_funcfrompsycopg2.extensionsimportadapt@markup_escape_funcdefsql_escape(v):# the decorator handles wrapping/unwrapping in Markup(), but is# otherwise not necessaryreturnadapt(v)env=DynAutoEscapeEnvironment(autoescape=True,escape_func=sql_escape)tpl=env.from_string('SELECT * FROM foo where post_date <= {{now}}')print(tpl.render(now=datetime.now()))
运行它输出:
SELECT * FROM foo where post_date <= '2016-01-24T23:23:22.727789'::timestamp