Django过滤器。 is_safe不起作用

时间:2016-12-03 13:06:56

标签: python django

在我的应用 teams / templatetags / teams_extras.py 我有这个过滤器

from django import template

register = template.Library()

@register.filter(is_safe=True)
def quote(text):
    return "« {} »".format(text)

所以我将它用于我的视图 teams / templates / teams / show.html

{% extends './base.html' %}
{% load static %}
{% load teams_extras %}
...
<b>Bio :</b> {{ team.biography|quote }}
...

但这是我页面上的结果:

&laquo; <p>The Miami Heat are an American professional basketball team based in Miami. The Heat compete in the National Basketball Association as a member of the league's Eastern Conference Southeast Division</p> &raquo; 

为什么? 谢谢

1 个答案:

答案 0 :(得分:4)

文档says

  

这个标志告诉Django如果一个“安全”字符串被传递到你的过滤器中,结果仍然是“安全的”,如果传入一个非安全字符串,Django会在必要时自动转义它。

因此,请尝试将安全值传递给过滤器:

{{ team.biography|safe|quote }}

或用户mark_safe

from django.utils.safestring import mark_safe

@register.filter()
def quote(text):
    return mark_safe("&laquo; {} &raquo;".format(text))

{{ team.biography|quote }}

这应该有效。