如何防止Django的label_tag函数转义标签?

时间:2016-09-14 09:34:12

标签: python django

示例:

>>> example.label
&#x3bb;<sub>blabla</sub>
>>> example.label_tag()
[...]&amp;#x3bb;&lt;blabla&gt;[...]

即使在mark_safe(example.label)之前调用label_tag()也不会阻止Django转义HTML。如何让label_tag()返回非转义标签?

3 个答案:

答案 0 :(得分:2)

code for label_tag

中有评论
Wraps the given contents in a <label>, if the field has an ID attribute.
contents should be 'mark_safe'd to avoid HTML escaping. If contents
aren't given, uses the field's HTML-escaped label.

所以

example.label_tag(contents=mark_safe(example.label))

应该工作..我无法看到解决这个问题的另一种方法

答案 1 :(得分:1)

试试这个:

            from HTMLParser import HTMLParser

            h = HTMLParser()
            unescaped = h.unescape(example.label_tag())
            print unescaped

答案 2 :(得分:0)

定义字段时,必须将标签标记为安全。

class MyForm(forms.Form):

    example = forms.Field(label=mark_safe('&#x3bb;<sub>blabla</sub>'))

示例:

>>> f = MyForm({'example': 'foo'})
>>> str(f)
'<tr><th><label for="id_example">&#x3bb;<sub>blabla</sub>:</label></th><td><input id="id_example" name="example" type="text" value="foo" /></td></tr>'