我有一个采用复杂数据类型的类,并使用__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。
是否可以从SafeString
返回__str__
而无需从模板中调用safe
?
答案 0 :(得分:2)
你不能; __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。