2011-07-07 23 views
18

En la siguiente variable de plantillas de Django .IS Es posible eliminar las etiquetas HTML a través de filtros de DjangoDjango plantilla de filtro de eliminar las etiquetas HTML

{{myvar|safe}} 

El aspirante siguiente salida de un HTML como

 <div>sddfdsfsdfsdf sd fsdf sd fsdf </div><a>This link</a><img src="some source" /> 

Respuesta

31

Tener usted miró striptags? Sería convertir su HTML en este (menos el resaltado de sintaxis de This, por supuesto):

sddfdsfsdfsdf sd fsdf sd fsdf This link 

Pero tenga en cuenta que este filtro plantilla utiliza un regex que se deben eliminar las etiquetas HTML. As we know, las expresiones regulares no son la herramienta adecuada para trabajar con HTML la mayor parte del tiempo. Si su HTML proviene del exterior, asegúrese de desinfectarlo con un analizador de HTML real, p. lxml.html.clean.

+1

¿Qué pasaría con las etiquetas de imagen ......? – Rajeev

+3

quita todas las etiquetas y solo deja lo que se consideraría '' TextNode''s en DOM-speak. Por lo tanto, su imagen se eliminará sin dejar rastros. –

+1

Sugiero usar '{{myvar | striptags | safe}}' para que las entidades HTML, como ' ', no sean escapadas por Django pero guardadas en código HTML y procesadas por el navegador web. Tenga en cuenta que el filtro 'striptags' en realidad elimina las etiquetas HTML, no las entidades. – Luca

12

striptags

hace todos los esfuerzos posibles para despojar todos [X] etiquetas HTML.

Por ejemplo:

{{ myvar|striptags }} 

Si mivar es <b>Joel</b> <button>is</button> a <span>slug</span>, la salida será Joel is a slug.

También puede usar strip_tags en su código python, es decir, en un formulario.

Por ejemplo, en un método limpio Forma:

class AddressForm(forms.ModelForm): 

    class Meta: 
     model = Address 

    def clean(self): 
     from django.utils.html import strip_tags 
     cleaned_data = super(AddressForm, self).clean() 
     cleaned_data['first_name'] = strip_tags(cleaned_data.get('first_name')) 
     return cleaned_data 

Ver Django HTML Utils, también echa un vistazo a este sencillo Django HTML Sanitizer App.

Cuestiones relacionadas