В Django, как я могу получить экранированный HTML в HttpResponse? - PullRequest
9 голосов
/ 22 декабря 2009

Следующий код в одном из моих представлений возвращает неэкранированную строку 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))

Какой самый простой способ исправить это? Заранее спасибо ..

Ответы [ 3 ]

20 голосов
/ 19 июля 2012

Lakshman Prasad ответ технически верен, но немного громоздок. Лучший способ экранировать текст будет (как предложено в комментарии miku выше):

from django.utils.html import escape
return HttpResponse(escape(some_string))
5 голосов
/ 22 декабря 2009

Чтобы вернуть клиенту простой 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 голос
/ 22 декабря 2009

По умолчанию должен сбежать.

Но, если вы хотите, вы можете явно принудительно убежать.

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