mark_safe无效/仍在simple_tag中转义

时间:2012-07-26 18:34:04

标签: django django-templates

我正在使用Django 1.3,我有一个simple_tag,我需要返回一些未转义的HTML,无论我做什么,它仍然逃避我的&到& amp;和我的至%7C。

from django import template
from django.template import loader, Context
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag()
def show_stuff(arg1=None, arg2=None, arg3='someconstant'):

    # Do some stuff

    if someconstant == 'somevalue':
        template_name = 'template1.html'
    else:
        template_name = 'template2.html'

    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = mark_safe(html)
    print type(html)
    return html

打印声明显示

<class 'django.utils.safestring.SafeUnicode'>

从我的理解不应该被转义。我正在模板中调用标签,如下所示:

{% show_stuff 'arg1' 'arg2' 'arg3' %}

非常感谢帮助。

更新:通过以下评论尝试了以下内容。没有返回错误,但仍然逃避HTML:

    ...
    template = loader.get_template(template_name)
    html = template.render(Context( {'myvar': myvar,} ))
    html = mark_safe(html)
    print type(html)
    return html
show_stuff().is_safe=True

还尝试在

中包装template1.html和template2.html的内容
{% autoescape off %}
template html contents with & and |
{% endautoescape %}

并使用autoescape标记包装templatetag调用本身。没有成功。

2 个答案:

答案 0 :(得分:3)

在与问题的作者讨论时,我们发现角色实际上没有被转义。 Scoopseven(作者)使用Firefox中的上下文菜单选项“Show Selection Source”查看了源html。在这种情况下,会显示转义字符。

答案 1 :(得分:1)

旧线程,但是最近我遇到了同样的问题。我得到它工作的Python 3.6。将简单标签中的值分配给txt,然后使用模板标签“ {{”输出txt,然后向txt添加安全过滤器。

{%get_contentvalue用户“ htmlabout”为txt%} {{txt | safe}}