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 ...
La façon alternative de faire cela aurait été
e.({{ function|safe }})
ce qui empêche l'échappement automatique.
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
.