从__str__返回mark_safe字符串
我有一个类,这个类可以处理复杂的数据类型,并通过 __str__
方法返回它的字符串表示。这样,我就可以直接在模板中使用这个对象了。不过,我还想在返回的字符串中包含HTML内容。如果我把这个字符串用 mark_safe
包裹起来并在模板中显示,HTML内容就会被转义。
这是我的类:
class StrTest:
def __init__(self, num):
self.num = num
def __str__(self):
return mark_safe("<span style='color:red'>Number is " + str(self.num) + '</span>')
这是我如何将它传递给模板的:
return render(request, 'my_template.html', {
'str_test': str_test,
})
还有我的模板:
{{str_test}}
如果我使用 {{str_test|safe}}
,那么HTML内容就不会被转义了。
有没有办法让 __str__
方法返回一个 SafeString
,而不需要在模板中调用 safe
呢?
1 个回答
5
你不能这样做;从 __str__
返回的值必须是一个 str
类型的值。
不过,支持 __html__
属性的模板语言会自动调用这个属性:
class StrTest:
def __init__(self, num):
self.num = num
def __str__(self):
return str(self.num)
def __html__(self):
return mark_safe(
'<span style="color: red">Number is {0}</span>'.format(self.num))
Django 从 1.7 版本开始支持这个功能,详情请查看 ticket #7261。