Jinja2 escapa automáticamente todas las etiquetas HTML, pero no quiero escapar algunas etiquetas (como img
, b
, y algunas otras). ¿Cómo puedo hacerlo?Jinja2 escapa todo HTML pero img, b, etc.
Respuesta
Puede escribir su propio filtro. El scrubber library es bastante bueno para limpiar HTML. El filtro deberá envolver la cadena devuelta en jinja2.Markup
para que la plantilla no vuelva a escapar.
Editar: un ejemplo de código
import jinja2
import scrubber
def sanitize_html(text):
return jinja2.Markup(scrubber.Scrubber().scrub(text))
jinja_env.filters['sanitize_html'] = sanitize_html
Querrá se analiza la entrada en la presentación utilizando un enfoque de lista blanca - hay varios buenos ejemplos in this question y viable options por ahí.
Una vez que haya hecho eso, puede marcar ninguna de las variables que van a contener HTML que no se debe escapó con el filtro safe
:
{{comment|safe}}
La biblioteca Bleach puede hacer muy bien.
Por ejemplo, suponiendo que el 'jinja_env' variable es en su alcance:
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
Luego, en una plantilla que podría tener algo como:
<p>{{ my_variable|clean(tags=['img', 'b', 'i', 'em', 'strong'], attributes={'img': ['src', 'alt', 'title', 'width', 'height']}) }}</p>
También puede utilizar un exigible (en lugar de una lista) en los atributos, lo que permite una validación más completa de los atributos (por ejemplo, verificar que src proporciona una URL válida). La documentación muestra an example.
- 1. Rails 3 html no deseado que escapa
- 2. HTML/CSS - ¿Poner img encima de img?
- 3. HTML img atributo "completo"
- 4. jinja2: variables de escape html
- 5. Bash escapa y comodines tilde pero no el espacio
- 6. ¿Por qué funciona "a + + b", pero "a ++ b" no?
- 7. UrlPathEncode no escapa espacios
- 8. ¿Todo compila, pero Resharper marca todo en rojo?
- 9. HTML Forzar img dimensiones requiere bloque?
- 10. pregunta simple en la etiqueta html img
- 11. HTML Agility Pack HtmlDocument ¿Mostrar todo Html?
- 12. Pasar HTML a la plantilla usando Flask/Jinja2
- 13. webapp2 + jinja2: ¿Cómo puedo obtener uri_for() trabajando en jinja2-views
- 14. json_encode() escapa barras diagonales
- 15. ¿Eliminar todo el HTML de una cadena?
- 16. Google Chrome se escapa WYSIWYG Javascript
- 17. selector CSS con clase a, pero no clase b
- 18. Jinja2 If Statement
- 19. jinja2 + reStructured Markup
- 20. javascript json.stringify no se escapa?
- 21. Cómo establecer la altura máxima de $ img pero tenga proporciones
- 22. Pastebin, pero para HTML?
- 23. ¿Cómo puedo organizar todo mi código, datos, scripts, tareas, etc.?
- 24. git ignorar todo, pero algunos subdirectorios
- 25. Regex búsqueda de todo pero no vacío
- 26. Regex - coincide con todo, pero barra inclinada
- 27. jQuery cambiar atributos múltiples o reemplazar todo html
- 28. javascript: ¿Cómo detectar SVG en HTML img element support?
- 29. ¿Cómo se refactoriza JavaScript, HTML, CSS, etc.?
- 30. HTML img y ASP.NET Imagen y rutas relativas