在Django中,如何在HttpResponse中得到转义的html?

qaxu7uf2  于 2022-11-26  发布在  Go
关注(0)|答案(5)|浏览(192)

我的一个视图中的以下代码返回未转义的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))

什么是最简单的方法来纠正这一点?提前感谢..

vm0i2vca

vm0i2vca1#

Lakshman Prasad的答案在技术上是正确的,但有点麻烦。一个更好的 * 转义 * 文本的方法是(如miku在上面的评论中所建议的):

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

mkshixfv2#

要从视图中仅向客户端返回纯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>
im9ewurl

im9ewurl3#

默认情况下,它应该转义。
但是,如果需要,可以显式强制转义。

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

kqhtkvqz4#

对于转义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)
nwsw7zdq

nwsw7zdq5#

在Django中,自动转义默认是关闭的

相关问题