web-dev-qa-db-fra.com

Échapper aux guillemets lors du rendu dans Jinja2

J'utilise Jinja2 pour créer du code Golang à l'aide de Python3. Je dois passer des paramètres entre guillemets à une fonction de mon code final, mais Jinja2 n'échappe pas aux guillemets doubles. Mon code python est quelque chose comme:

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

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

Mon modèle est:

e.({{function}})

Ce que je reçois dans la console (l'empreinte dans le code python):

Function("a", "b")

Ce que je voulais dans mon code final dans Go:

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

Qu'est-ce que je suis en train d'obtenir dans mon code final:

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

J'ai déjà essayé:

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

Et aucun d'entre eux n'a fonctionné comme je le voulais. Des idées?

Je vous remercie :))

"Résolu":

J'ai changé de guillemets doubles en `, donc mon code python est maintenant:

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

Et mon code final Go est:

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

Et cela fonctionne sur Go. Ce n'est pas la meilleure solution mais ça marche ...

5
Cris Motinha

La façon alternative de faire cela aurait été

e.({{ function|safe }})

ce qui empêche l'échappement automatique.

14
sberry

Cela est dû à l'auto-encapsulation de Jinja2. Comme décrit dans la documentation , le moyen recommandé d'éviter cela consiste à envelopper le texte dans un objet Markup.

0
Daniel Roseman