我正在使用 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 %}
并用自动转义标签包装模板标签调用本身。没有成功。