Python render_template retourne texte HTML au lieu du HTML

Bonjour,

J'aimerais pouvoir récupérer sur mon serveur Flask (en Python) une page web dont certains bouts ont étés ajoutés grâce à la méthode render_template de Flask

Plus précisément :

J'ai une page html (simplifiée) :

<head>

</head>

<body>
{{ codeHTML }}
</body>

et j'aimerais la compléter pour l'envoyer sur mon serveur grâce à la méthode render_template sous la forme suivante :

render_temlate("page.html", code=codeHTML)

Malheureusement le code HTML ne s'affiche pas comme prévu : il s'affiche en tant que texte

Est-ce que quelqu'un aurait une solution

Merci ????

@+ 

2 réponses

  1. Bonjour, ce n'est tout de même pas clair ce que tu énonces.

    Dans ton template il y a un codeHTML, et dans ton code python t'as un « code » qui n'est pas dans ton template, cela devrait donc être

    render_template("page.html", codeHTML=codeHTML)

    Que vaut la variable codeHTML ? C'est elle qui est du html ? Pourquoi ce html n'est pas dans un autre template que tu incluerais dans celui-là ?

    Bon, mon message bogue, et je ne sais pas pourquoi...

    1. Modérateur

      Par défaut les inclusions {{ ... }} d'informations échappent les caractères HTML (évite les failles de XSS et autre du même genre).

      Il faut probablement ajouter un filtre, par exemple sur Twig, il faut mettre {{ CodeHTML|raw }}.

      Selon https://flask.palletsprojects.com/en/2.1.x/templating/
      Tu peux utiliser par exemple :

      {% autoescape false %}
          <p>autoescaping is disabled here
          <p>{{ will_not_be_escaped }}
      {% endautoescape %}

      Plus de détail dans la section "Controlling Autoescaping".