逃避jinja2中的引用

Raz*_*mig 11 python jinja2

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

object_name = {
    property_name: "{{ _("Some Text which might have "quotes" in it")  }}"
}
Run Code Online (Sandbox Code Playgroud)

然后在脚本标记中导入上面的jinja2文件

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

任何想法如何逃避传入的报价并将其转换为例如"

编辑

解决方案:

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

看看这份文件也是如此

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

Gar*_*ett 8

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\""
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*hen 8

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

string = {{ html_string|tojson }};
Run Code Online (Sandbox Code Playgroud)

另一种选择 - 在 Python 中创建 dict,然后将其转换为 javascript 对象,并一次性使用

jsObject = {{ py_dict|tojson }};
Run Code Online (Sandbox Code Playgroud)


Aja*_*jay 4

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

object_name = {
    property_name: "{{ _(\\\"Some Text which might have \\\"quotes\\\" in it\\\")  }}"
}
Run Code Online (Sandbox Code Playgroud)