8

我正在使用 Django 1.3,我有一个 simple_tag,我需要返回一些未转义的 HTML,无论我做什么,它仍然会将我的 & 转义为 & 和我的| %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 %}

并用自动转义标签包装模板标签调用本身。没有成功。

4

2 回答 2

4

旧线程,但我最近遇到了同样的问题。我让它工作python 3.6。将简单标签的值分配给变量 txt 并使用模板标签“{{”输出 txt 并将安全过滤器添加到 txt。

{% get_contentvalue user "htmlabout" as txt %}
{{txt|safe}}
于 2020-01-08T02:15:50.157 回答
3

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

于 2012-07-26T20:26:11.407 回答