2012-06-03 18 views
6

Con Django, ¿es posible que los usuarios envíen HTML en un campo de formulario, lo guarden y luego muestren el HTML en la plantilla?Django: Permitir que el usuario envíe HTML válido en el campo de formulario

Un ejemplo es un usuario que agrega un enlace dentro de un campo de texto que luego debe representarse como una etiqueta dentro del resto del texto.

El usuario introduzca algo así como:

this is a site called <a href="http://stackoverflow.com">SO</a>. 

El enlace SO sería un enlace en lugar de hacerla en forma de texto.

Respuesta

11

Django se escapa por defecto. Puede marcar una cadena como safe a través de filter or tag para evitar el comportamiento de escape automático.

{{ my_text_with_html|safe }} 

{% autoescape off %} 
    {{ my_test_with_html }} 
{% endautoescape %} 

Si acepta el usuario html introducido, tendrá que esterilizarlo, para que no puedan escribir guiones y tal .. para eso, sólo la búsqueda de pitón html desinfección y aplicarlo antes de enviar los datos a la plantilla .

Python HTML sanitizer/scrubber/filter

3

le puede decir a Django el código HTML es seguro marcándolo con the appropriate filter:

{{ variable|safe }} 

También puede utilizar el autoescape tag para desactivar el autoescaping:

{% autoescape off %} 
    {{ variable }} 
{% endautoescape %} 

Sin embargo, en caso de que esté habilitando esta función para otros usuarios (desconocidos), recomiendo usar otra cosa, ya que el HTML puede ser q Es muy difícil desinfectarse correctamente con JavaScript u otras cosas HTML que no desee (p. ej., en * argumentos, etc.). Django realmente se envía con soporte básico para algunos markup languages que puede proporcionar a sus usuarios. Supongo que markdown es el más popular.

+0

El marcado Django ha sido obsoleto. Si desea utilizar el marcado no HTML, deberá usar un proyecto contrib como este: https://github.com/jamesturk/django-markupfield – Tristan

Cuestiones relacionadas