为Jinja2定制自动转义。

jinja-vanish的Python项目详细描述


使用Jinja2-模板输出非html内容时,自动转义无法 因为它是硬编码的,可以与HTMLescape函数和 MarkupSafe的标记对象。

通过重写 escape函数在使用扩展的 代码生成器并替换内置筛选器|e|escape。用法 很简单,下面是一个使用psycopg2mogrify() 用于转义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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于切换状态结果的枚举的java输入   检测*NIX上打开的端口时出现java问题   java捕获和保存屏幕截图   java SLF4JLogback:基于日志级别的多模式   Java从字符串中删除动态子字符串   在spring引导中contextLoads测试时运行java Liquibase   基于规则集的任意嵌套POJO的java任意就地转换   java如何做,边做边循环这段代码?   java是什么导致jmh测量中的错误?   java Spring RabbitTemplate执行方法可见性   java jms创建连接http超时weblogic   java如何在JMapViewer中的两点之间放置像箭头一样的图像   在我的形状计算器Java程序中使用带有Switch/Case语句的循环   字符串如何在Java中比较字符和数字