从 __str__ 返回 mark_safe 字符串

use*_*706 0 python django

我有一个类,它采用复杂的数据类型并使用该方法返回它的字符串表示形式__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从模板调用?

Mar*_*ers 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))
Run Code Online (Sandbox Code Playgroud)

Django 从 1.7 版本开始支持此功能,请参阅票证 #7261