Как мне изменить объект HttpResponse в Django? - PullRequest
0 голосов
/ 22 декабря 2009

Мне нужен html, возвращаемый с помощью render_to_response, для экранирования. Я не могу найти подходящую документацию. Может кто-то указать в каком-то направлении?

код:

return render_to_response(template_name, {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))

Здесь мне нужно экранировать текст ответа html. Я, насколько я знаю, читает файл шаблона в строке и экранирует его с помощью re.escape (), а затем отображает его. что чище и проще сделать это ??

Ответы [ 3 ]

2 голосов
/ 22 декабря 2009

Звучит так, будто вы хотите избежать полного отклика - это правда? Это кажется немного странным, но вы, безусловно, можете это сделать.

import django.utils.html as html
string = render_to_string(<all of the args to render_to_response>)
escaped_string = html.escape(string)
return HttpResponse(escaped_string)

Я не совсем уверен, что человек / браузер на другом конце будет делать с этим, но звучит так, как вы просили.

2 голосов
/ 22 декабря 2009

Строка, передаваемая из представлений в шаблоны через render_to_response, по умолчанию экранируется.

См .: http://docs.djangoproject.com/en/dev/topics/templates/#id2

По умолчанию в Django каждый шаблон автоматически экранирует вывод каждого тега переменной. В частности, эти пять символов экранированы:

< is converted to &lt;
> is converted to &gt;
' (single quote) is converted to &#39;
" (double quote) is converted to &quot;
& is converted to &amp;

Опять же, мы подчеркиваем, что это поведение включено по умолчанию.

1 голос
/ 22 декабря 2009

Вы можете использовать шаблонный фильтр escape или тег шаблона autoescape. Смотри http://docs.djangoproject.com/en/dev/ref/templates/builtins/

...