逃避jinja2中的引用

时间:2013-07-30 07:45:08

标签: python jinja2

我正在jinja文件中构建一个json对象:

object_name = {
    property_name: "{{ _("Some Text which might have "quotes" in it")  }}"
}

然后在脚本标记

中导入上面的jinja2文件

注意:_(“文本”)用于替换为翻译文本,因此()中的文本将替换为另一种语言的文本,因此我无法预测翻译是否包含双引号

任何想法如何逃避传入的引号并将它们转换为例如“

被修改

解决方案:

我们解决这个问题的方法是让python遍历所有翻译并逃避所有的qoutations。但我们总是要确保至少英文文本没有问题,无论如何我们已经控制了这个....到目前为止:)

请查看此文档

http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html#sec-poescapes

3 个答案:

答案 0 :(得分:7)

flask中,您可以使用名为tojson的默认过滤器,或者使用普通jinja2,您可以创建自己的tojson过滤器:

>>> import json
>>> env = jinja2.Environment()
>>> env.filters['tojson'] = json.dumps
>>> tmpl = env.from_string("""\
object_name = {
    property_name: {{ _(text)|tojson  }}
}""")
>>> print tmpl.render({'_': lambda x: x, 'text': 'Some text with "Quotes"'})
object_name = {
    property_name: "Some text with \"Quotes\""
}

答案 1 :(得分:2)

没有清楚地理解这个问题。如果使用单个反斜杠转义不起作用,也可以使用

转义反斜杠
object_name = {
    property_name: "{{ _(\\\"Some Text which might have \\\"quotes\\\" in it\\\")  }}"
}

答案 2 :(得分:2)

Jinja2具有不错的过滤器tojson。如果从字符串制作json,它将生成用双引号“”括起来的字符串。您可以在javascript中安全地使用它。而且您不需要自己加上引号。

string = {{ html_string|tojson }};

另一个选项-使用Python创建字典,然后一次性使用将其转换为javascript对象

jsObject = {{ py_dict|tojson }};