Django的。双引号字符串双引号第二次

时间:2016-02-16 07:50:41

标签: python-3.x django-templates

我写了这个简单的标签:

@register.simple_tag(name='is_active', takes_context=True)
def is_active(context, url_name):
    if reverse(url_name) == context.request.path:
        return 'class="active"'
    return ''

在模板中:

 <li {% is_active 'home_page' %}>

在开发服务器上,它呈现如下:

<li class="active">

但是在使用UWSGI的生产服务器上,它使用重复的双引号进行渲染:

<li class=""active"">

UPD: Firebug将&amp; quot 渲染为&#34;。 实际上它看起来像:

<li class="&quot;active&quot;">

这是django测试服务器中的错误吗? 我怎样才能摆脱这种转变?

1 个答案:

答案 0 :(得分:0)

来自django文档simple tags

  

与其他标记实用程序不同,如果模板上下文处于自动调用模式,simple_tag会通过conditional_escape()传递其输出,以确保正确的HTML并保护您免受XSS漏洞的攻击。<​​/ p>      

如果不需要额外的转义,如果您完全确定您的代码不包含XSS漏洞,则需要使用mark_safe()。要构建小型HTML代码段,强烈建议使用format_html()而不是mark_safe()。

代码:

return format_html('class="active"')

UPD。这不是django中的错误,这是我的错误。我在Django 1.8.7本地开发,但在服务器上django更新为1.9.2