我写了这个简单的标签:
@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=""active"">
这是django测试服务器中的错误吗? 我怎样才能摆脱这种转变?
答案 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