Автоматическое экранирование HTML Django

При генерации HTML-разметки по шаблону всегда есть опасность, что значение переменной будет содержать нежелательные символы. Возьмем, к примеру, такой фрагмент:

Привет, {{ name }}.

На первый взгляд, совершенно безобидный способ вывести имя пользователя, но представьте, что произойдет, если пользователь введет такое имя:

Читать

Объект RequestContext и контекстные процессоры

Для отображения шаблона необходим контекст. Обычно таковым является экземпляр класса django.template.Context, но в Django имеется также специальный подкласс django.template.RequestContext, который действует несколько иначе. RequestContext автоматически помещает в контекст несколько дополнительных переменных, например, объект HttpRequest или информацию о текущем аутентифицированном пользователе.

Читать

Углубленное изучение шаблонов Django

Несмотря на то что в большинстве случаев вы будете взаимодействовать с системой шаблонов Django в роли автора шаблонов, иногда у вас будет возникать желание настроить или расширить сам механизм шаблонов - либо для того чтобы заставить его делать нечто такое, что он не умеет, либо чтобы упростить решение какой-то задачи.

Читать

Дополнительные параметры в конфигурации URL и механизм include()

Во включаемую конфигурацию URL можно передавать дополнительные параметры обычным образом - в виде словаря. Но при этом дополнительные параметры будут передаваться каждой строке включаемой конфигурации.

Например, следующие два набора конфигурации URL функционально эквивалентны.

Первый набор:

Читать

Включение других конфигураций URL Django

Если вы планируете использовать свой код на нескольких сайтах, созданных на основе Django, то должны организовать свою конфигурацию URL так, чтобы она допускала возможность включения в другие конфигурации.

Внешние модули конфигурации URL можно включать в любой точке имеющейся конфигурации. Вот пример конфигурации URL, включающей другие конфигурации:

Читать

Обертывание функций представления

Последний прием, который мы рассмотрим, опирается на относительно редко используемую возможность Python. Предположим, что в разных представлениях многократно встречается один и тот же код, например:

def my_view1(request):

if not request.user.is_authenticated():

return HttpResponseRedirect(‘/accounts/login/’) tt . ..

Читать

Высокоуровневые абстракции функций представления

Раз уж мы заговорили о ветвлении по методу запроса, покажем, как это можно элегантно осуществить. Рассмотрим следующую строку в конфигурации URL:

# urls.ру

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patternsC’, tt . ..

(r’~somepage/$’, views.some_page), tt …

Читать

Обработка сохраняемых фрагментов текста Django

Каждый сохраняемый аргумент передается представлению в виде обычной Unicode-строки вне зависимости от его особенностей. Например, при сопоставлении со следующим образцом аргумент year будет передан представлению views.year_archive() как строка, а не как целое число, несмотря на то что выражение \d{4} совпадает только со строками, состоящими из одних цифр:

Читать

Представления для обработки особых случаев Django

Иногда в конфигурации URL определяется образец, совпадающий сразу со многими URL, часть из которых нужно обрабатывать особым образом. Тогда можно воспользоваться тем фактом, что образцы просматриваются последовательно, и поместить особый случай в начало списка.

Например, страницы «добавить объект» в административном интерфейсе Django можно было бы представить таким образцом URL:

Читать

Аргументы представления, принимаемые по умолчанию Django

Еще один удобный прием - определение значений по умолчанию для аргументов представления. Тем самым мы сообщаем представлению, какое значение параметра следует использовать, если оно явно не задано при вызове функции. Например:

# urls.ру

from django.conf.urls.defaults import * from mysite import views

Читать