web-dev-qa-db-ja.com

jinja2で引用符をエスケープする

私はjinjaファイルでjsonオブジェクトを構築しています:

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

次に、上記のjinja2ファイルをスクリプトタグにインポートします

注:_( "Text")は翻訳テキストに置き換えられるため、()内のテキストは別の言語のテキストに置き換えられるため、翻訳に二重引用符が含まれるかどうかは予測できません。

入ってくる引用符をエスケープして、たとえば「」に変換する方法についてのアイデア

編集済み

解決策:

私たちにとってこの問題の解決策は、pythonすべての翻訳を通過し、すべての引用をエスケープすることでした。しかし、少なくとも英語のテキストに問題がないことを常に確認する必要があります。これを制御する....これまでのところ:)

このドキュメントも見てください

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

12
Razmig

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\""
}
7
Garrett

Jinja2にはNiceフィルターがあります tojson 。文字列からjsonを作成すると、二重引用符 ""で囲まれた文字列が生成されます。 javascriptで安全に使用できます。また、自分で引用符を付ける必要はありません。

string = {{ html_string|tojson }};

別のオプション-Pythonでdictを作成し、それを1回の使用でjavascriptオブジェクトに変換します

jsObject = {{ py_dict|tojson }};
3

質問をはっきりと理解していませんでした。単一の円記号でエスケープすることが機能しなかった場合は、バックスラッシュも使用してエスケープします

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