Jinja2 sfugge automaticamente a tutti i tag HTML, ma non voglio sfuggire alcuni tag (come img
, b
e alcuni altri). Come posso farlo?Jinja2 sfugge tutto il codice HTML ma img, b, ecc.
risposta
È possibile scrivere il proprio filtro. Lo scrubber library è abbastanza efficace per la pulizia dell'HTML. Il filtro avrà bisogno di avvolgere la stringa restituita in jinja2.Markup
in modo che il modello non lo elimini di nuovo.
Edit: un esempio di codice
import jinja2
import scrubber
def sanitize_html(text):
return jinja2.Markup(scrubber.Scrubber().scrub(text))
jinja_env.filters['sanitize_html'] = sanitize_html
ti consigliamo di analizzare l'input su presentazione utilizzando un approccio lista bianca - ci sono molti buoni esempi in this question e viable options là fuori.
Una volta fatto questo, è possibile contrassegnare tutte le variabili che conterranno HTML che non deve essere sfuggito con il filtro safe
:
{{comment|safe}}
La biblioteca Bleach può fare molto bene.
Per esempio, supponendo che il 'jinja_env' variabile è portata:
from bleach import clean
from markupsafe import Markup
def do_clean(text, **kw):
"""Perform clean and return a Markup object to mark the string as safe.
This prevents Jinja from re-escaping the result."""
return Markup(clean(text, **kw))
jinja_env.filters['clean'] = do_clean
Poi, in un modello che si potrebbe avere qualcosa di simile:
<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p>
È inoltre possibile utilizzare un callable (invece di una lista) negli attributi, consentendo una convalida più approfondita degli attributi (ad es. verificando che src fornisca un URL valido). La documentazione mostra an example.
- 1. Include il file html nel modello Jinja2
- 2. jinja2: html escape variables
- 3. Bash sfugge e caratteri jolly tilde, ma non lo spazio
- 4. HTML img onclick Javascript
- 5. HTML templating con Jinja2 - Lost
- 6. Come mantenere le proporzioni utilizzando il tag HTML IMG
- 7. Dove mettere tutto il codice JavaScript jQuery?
- 8. Utilizzo di PHP/Apache per limitare l'accesso ai file statici (html, css, img, ecc.)
- 9. Come posso organizzare tutto il mio codice, dati, script, attività, ecc?
- 10. Come scrivere il nome dell'entità HTML ( , <, >, ecc.)
- 11. Seleziona tutto il testo tra virgolette, parentesi ecc in Atom.io
- 12. forzatura HTML dimensioni img richiede un blocco?
- 13. Il codice Javascript funziona bene ... quasi tutto il tempo
- 14. Seleziona tutto dove [prima lettera inizia con B]
- 15. Perché "a + + b" funziona, ma "a ++ b" no?
- 16. domanda semplice su tag html img
- 17. Copertura del codice per i modelli Jinja2
- 18. Assegnazioni multiple var a = b = b || {} Nel codice javascript
- 19. Minimizza tutto sails.js fornito html
- 20. webapp2 + jinja2: Come posso ottenere uri_for() lavorando in jinja2-views
- 21. Rimuovere in modo sicuro tutto il codice html da una stringa in python
- 22. RestTemplate per non sfugge url
- 23. Come trovare tutto il codice inutilizzato in Ruby on Rails
- 24. codice html per il punto
- 25. Codeigniter che memorizza il codice html nel database non funziona
- 26. Jinja2 Template - per il ciclo
- 27. Come ottenere tutto il javascript correlato a un elemento html
- 28. Jinja2 If Statement
- 29. Rimuovi tutto JavaScript da una pagina HTML
- 30. Come posso assicurarmi che tutto il mio codice Python "compili"?