web-dev-qa-db-ja.com

Jinja2でのレンダリング中に二重引用符をエスケープする

Jinja2を使用して、Python3でGolangコードを作成しています。いくつかのパラメーターを引用符で囲んで最終的なコードの関数に渡す必要がありますが、Jinja2は二重引用符をエスケープしていません。私のpythonコードは次のようなものです:

list_s = ['a', 'b']
string = '\"' + '", "'.join(list_s) + '\"'
final_string = 'Function(' + string + ')'
print(final_string)

template.render({'function': final_string})

私のテンプレートは:

e.({{function}})

コンソールで取得しているもの(pythonコードの印刷):

Function("a", "b")

Goの最終的なコードで必要なもの:

e.(Function("a", "b"))

私が実際に私の最終的なコードで得ているもの:

e.(Function("a", "b"))

私はすでに試しました:

'`\"`' , '`"`', "'\"'", "\\\"", "\N{Quotation Mark}"

そして、それらのどれも私が望んだように機能しませんでした。何か案は?

ありがとうございました :))

"解決済み":

私は二重引用符から `に変更したので、私のpythonコードは今:

string = '`' + '`, `'.join(list_s) + '`'

そして私の最後のGoコードは:

e.(Function(`a`, `b`))

そして、これはGoで機能します。それは最善の解決策ではありませんが、うまくいきます...

9
Cris Motinha

これを行う別の方法は、

e.({{ function|safe }})

自動エスケープを防ぎます。

14
sberry

これは、Jinja2の自動エスケープによるものです。 ドキュメント で説明されているように、これを回避するには、テキストをMarkupオブジェクトでラップすることをお勧めします。

0
Daniel Roseman