13

我的一个视图中的以下代码返回无法在前端解析的未转义 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))

纠正此问题的最简单方法是什么?提前致谢..

4

3 回答 3

30

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

from django.utils.html import escape
return HttpResponse(escape(some_string))
于 2012-07-19T10:06:39.140 回答
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>
于 2009-12-22T13:16:11.487 回答
1

它应该默认逃逸。

但是,如果你愿意,你可以明确地强制转义。

from django.utils.safestring import mark_for_escaping
return HttpResponse(mark_for_escaping(loader.render_to_string(""""Render Response Syntax"""))
于 2009-12-22T14:45:55.703 回答