我正在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
答案 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 }};