2011-07-07 40 views
18

在下面的Django模板變量。是有可能通過Django的模板過濾器去除html標籤Django的模板過濾器去除html標籤

{{myvar|safe}} 

下將輸出一個HTML一樣

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

回答

31

有你看了striptags?它會變成你的HTML到這個(的This減去語法高亮,當然):

sddfdsfsdfsdf sd fsdf sd fsdf This link 

但要注意,這個模板過濾器使用regex剝離出來的HTML標籤。 As we know,正則表達式不適合大多數情況下使用HTML。如果您的HTML來自外部,請務必使用真正的HTML解析器對其進行清理,例如lxml.html.clean

+1

圖片標籤會發生什麼...... ......? – Rajeev

+3

它去掉了所有的標籤,只留下了DOM中所說的「TextNode」。因此,您的圖像將被刪除而不會留下任何痕跡。 –

+1

我建議使用'{{myvar | striptags | safe}}',這樣HTML實體(例如' ')不會被Django轉義,而是保存在HTML代碼中並由Web瀏覽器呈現。請注意,'striptags'過濾器實際上剝離了HTML標籤,而不是實體。 – Luca

12

striptags

盡全力去除所有[X] HTML標籤。

例如:

{{ myvar|striptags }} 

如果MYVAR是<b>Joel</b> <button>is</button> a <span>slug</span>,輸出將是Joel is a slug

您還可以在您的python代碼中使用strip_tags,即在窗體中。

例如,在一個乾淨利落的方法:

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 

Django HTML Utils,還檢查了這個簡單的Django HTML Sanitizer App