2016-02-16 146 views
0

我寫了這個簡單的標籤:Django。雙引號字符串雙引號的第二次

@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:螢火蟲渲染& QUOT爲」。 其實它看起來像:

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

它是在Django測試服務器中的錯誤? 我該如何逃避這種轉變?

回答

0

從Django文檔simple tags

不像其他標籤公用事業,simple_tag通過conditional_escape()如果模板上下文在autoescape模式的輸出,以確保正確的HTML和保護您免受XSS漏洞。

如果不需要額外的轉義,如果您完全確定代碼不包含XSS漏洞,則需要使用mark_safe()。爲了構建小的HTML片段,強烈建議使用format_html()而不是mark_safe()。

代碼:

return format_html('class="active"') 

UPD。這不是django中的錯誤,這是我的錯誤。我本地在Django 1.8.7上開發,但在服務器上django更新到1.9.2