0

我是一个菜鸟 django 程序员,我想为 Django 模板创建自己的模板标签。我创建了一个模板标签模块,当我使用显示的代码时它似乎可以正常工作;但是,我的函数返回一个带有"&lt;"and"&gt;"而不是"<"and的字符串">"(好像函数的结果会被addslashes()函数修改)。我的代码有什么问题?

base_template.html(使用我的模板标签的 django 模板)

<% load templatetags %>
<html>
 <head>
 </head>
 <body>
   {# text contains a string #}
   {{ text | formattedtext }}
 </body>
</html>

模板标签.py

from django import template

register = template.Library()
@register.filter(name='formattedtext')

def formattedtext(value):
    try:
        scoringTemplate = "<b>" + value + "</b>"
        print scoringTemplate #return string with "<b>text</b>"
        return scoringTemplate #however, this returns string with "&lt;text&gt;" value :(
    except ValueError:
        return value
    except:
        return value
4

1 回答 1

2

您需要将输出标记为“安全”: https ://docs.djangoproject.com/en/dev/ref/utils/#django.utils.safestring.mark_safe

所以,你的代码应该变成:

from django import template
from django.utils.safestring import mark_safe

register = template.Library()
@register.filter(name='formattedtext')

def formattedtext(value):
    try:
        scoringTemplate = "<b>" + value + "</b>"
        print scoringTemplate #return string with "<b>text</b>"
        return mark_safe(scoringTemplate)   # unescaped, raw html
    except ValueError:
        return value
    except:
        return value
于 2012-10-30T20:52:43.337 回答