我有一个类,它采用复杂的数据类型并使用该方法返回它的字符串表示形式__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>')
Run Code Online (Sandbox Code Playgroud)
以下是我将其传递给模板的方法:
return render(request, 'my_template.html', {
'str_test': str_test,
})
Run Code Online (Sandbox Code Playgroud)
和我的模板:
{{str_test}}
Run Code Online (Sandbox Code Playgroud)
如果我这样做{{str_test|safe}},HTML 就不再被转义。
是否可以返回SafeStringfrom__str__而无需safe从模板调用?
你不能;返回值__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))
Run Code Online (Sandbox Code Playgroud)
Django 从 1.7 版本开始支持此功能,请参阅票证 #7261。
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |