2012-09-09 22 views
12

Ho un piccolo problema a capire cosa fa un'espressione come {{ something.render() | safe }}.Jinja 2 safe keyword

Da quello che ho visto, senza la parola chiave safe emette l'intero documento html, non solo il vero contenuto.

Quello che mi piacerebbe sapere, è ciò che effettivamente fa, come funziona.

risposta

12

Il filtro safe contrassegna in modo esplicito una stringa come "sicuro", vale a dire, non deve essere automaticamente scappato se l'autoesclusione è abilitata.

La documentazione su questo filtro è here.

Vedere la sezione su manual escaping per vedere quali caratteri sono idonei per l'escape.

15

Normalmente il testo è HTML-escape (così <b> sarebbe da scrivere come &lt;b&gt;, che renderebbe come <b>).

Quando si aggiunge |safe dopo qualcosa, si sta dicendo al motore del modello che si è già sfuggito il testo da soli, vale a dire "è sicuro renderlo direttamente". Quindi non farà quella codifica per te.

Per maggiori informazioni: http://jinja.pocoo.org/docs/templates/#html-escaping

4

Per chi viene qui in cerca di utilizzare il filtro di sicurezza a livello di codice: avvolgerla in una classe markupsafe.Markup, su cui Jinja2 dipende.