在Django中,我如何获得HttpResponse中的转义HTML?

15

在我的一个视图中,以下代码返回未转义的HTML字符串,由于它是一个Ajax请求,因此无法在前端解析。

return render_to_response(template_name, {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }, context_instance=RequestContext(request))

最简单的方法是什么?谢谢提前。

5个回答

37

Lakshman Prasad 的回答在技术上是正确的,但有点繁琐。一个更好的 转义 文本的方法是(正如miku 在上面的评论中建议的那样):

from django.utils.html import escape
return HttpResponse(escape(some_string))

2
文档:https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.html.escape - voy

6
在视图中向客户端返回纯HTML,可以使用django.http.HttpResponse
from django.http import HttpResponse

def view(request)
    # Do stuff here
    output = '''
    <html>
        <head>
            <title>Hey mum!</title>
        </head>
    </html>'''
    return HttpResponse(output)

为了防止Django模板系统在模板中转义HTML,请使用|safe过滤器:
response = "<img src='cats.png'/>"

# Meanwhile, in the template...
<div id="response">
    {{response|safe}}
</div>

1
Django没有自动转义响应,我已经通过Firebug确认了这一点。我需要它被转义。 - Nullpoet
1
那么,您想让 <p> 变成 &lt;p&gt; 吗?还是保持为 <p> - Josh Hunt

1

默认情况下应该进行转义。

但是,如果您想要的话,可以显式地强制转义。

from django.utils.safestring import mark_for_escaping
return HttpResponse(mark_for_escaping(loader.render_to_string(""""Render Response Syntax"""))

0

如果要转义 html,可以使用 escape 模块。

此外,您还可以通过以下方式覆盖 HttpResponse 的行为:


from django.utils.html import escape
from django.http import HttpResponse

class HttpResponseEscaped(HttpResponse):
    def __init__(self, content, *args, **kwargs):
        super().__init__(escape(content), *args, **kwargs)

0
在Django中,默认情况下自动转义是关闭的。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接