Миксины одного объекта¶
SingleObjectMixin
¶
-
class
django.views.generic.detail.
SingleObjectMixin
¶ Предоставляет механизм для поиска объекта, связанного с текущим HTTP-запросом.
Методы и атрибуты
-
model
¶ Модель, для которой это представление будет отображать данные. Указание
model = Foo
фактически то же самое, что и указаниеqueryset = Foo.objects.all()
, гдеobjects
означаетFoo
“default manager.
-
queryset
¶ QuerySet
, который представляет объекты. Если предоставлено, значениеqueryset
заменяет значение, предоставленное дляmodel
.Предупреждение
queryset
- это атрибут класса с изменяемым значением, поэтому при его непосредственном использовании следует соблюдать осторожность. Прежде чем использовать его, либо вызовите его методall()
, либо получите его с помощьюget_queryset()
, который позаботится о клонировании за сценой.
-
slug_field
¶ Имя поля в модели, которое содержит slug. По умолчанию
slug_field
-'slug'
.
-
slug_url_kwarg
¶ Имя аргумента ключевого слова URLConf, содержащего slug. По умолчанию
slug_url_kwarg
-'slug'
.
-
pk_url_kwarg
¶ Имя аргумента ключевого слова URLConf, содержащего первичный ключ. По умолчанию
pk_url_kwarg
-'pk'
.
-
context_object_name
¶ Обозначает имя переменной для использования в контексте.
-
query_pk_and_slug
¶ Если
True
, заставляетget_object()
выполнять поиск, используя как первичный ключ, так и slug. По умолчанию установлено значениеFalse
.Этот атрибут может помочь смягчить атаки insecure direct object reference. Когда приложения разрешают доступ к отдельным объектам по последовательному первичному ключу, злоумышленник может перебором угадать все URL-адреса, получив таким образом список всех объектов приложения. Если необходимо предотвратить получение этого списка пользователями, имеющими доступ к отдельным объектам, установка
query_pk_and_slug
наTrue
поможет предотвратить угадывание URL, поскольку каждый URL будет требовать двух правильных, непоследовательных аргументов. Использование уникального slug может служить той же цели, но эта схема позволяет иметь неуникальные slug.
-
get_object
(queryset=None)¶ Возвращает единственный объект, который будет отображен этим представлением. Если указано
queryset
, то в качестве источника объектов будет использоваться этот кверисет; в противном случае будет использоватьсяget_queryset()
.get_object()
ищет аргументpk_url_kwarg
в аргументах представления; если этот аргумент найден, этот метод выполняет поиск по первичному ключу, используя это значение. Если этот аргумент не найден, он ищет аргументslug_url_kwarg
и выполняет поиск по slug, используяslug_field
.Если
query_pk_and_slug
равноTrue
,get_object()
будет выполнять поиск, используя как первичный ключ, так и slug.
-
get_queryset
()¶ Возвращает набор queryset, который будет использоваться для получения объекта, который будет отображаться этим представлением. По умолчанию
get_queryset()
возвращает значение атрибутаqueryset
, если он установлен, иначе он конструируетQuerySet
, вызывая методall()
на менеджере по умолчанию атрибутаmodel
.
-
get_context_object_name
(obj)¶ Возвращает имя контекстной переменной, которая будет использоваться для содержания данных, которыми манипулирует это представление. Если
context_object_name
не задано, имя контекста будет сконструировано изmodel_name
модели, из которой состоит кверисет. Например, модельArticle
будет иметь объект контекста с именем'article'
.
-
get_context_data
(**kwargs)¶ Возвращает контекстные данные для отображения объекта.
Базовая реализация этого метода требует, чтобы атрибут
self.object
был установлен представлением (даже еслиNone
). Обязательно сделайте это, если вы используете этот миксин без одного из встроенных представлений, которые делают это.Он возвращает словарь с этим содержимым:
object
: Объект, который отображает данное представление (self.object
).context_object_name
:self.object
также будет храниться под именем, возвращаемымget_context_object_name()
, которое по умолчанию является строчной версией имени модели.
Контекстные переменные переопределяют значения из контекстных процессоров шаблона
Любые переменные из
get_context_data()
имеют приоритет над контекстными переменными из context processors. Например, если ваше представление устанавливает атрибутmodel
вUser
, имя объекта контекста по умолчаниюuser
будет переопределять переменнуюuser
из контекстного процессораdjango.contrib.auth.context_processors.auth()
. Используйтеget_context_object_name()
, чтобы избежать столкновения.
-
get_slug_field
()¶ Возвращает имя поля slug, которое будет использоваться для поиска по slug. По умолчанию возвращается значение
slug_field
.
-
SingleObjectTemplateResponseMixin
¶
-
class
django.views.generic.detail.
SingleObjectTemplateResponseMixin
¶ Класс-миксин, выполняющий отрисовку ответа на основе шаблона для представлений, которые работают с одним экземпляром объекта. Требует, чтобы представление, с которым он смешивается, предоставляло
self.object
, экземпляр объекта, над которым работает представление.self.object
обычно является, но не обязан быть, экземпляром модели Django. Это может бытьNone
, если представление находится в процессе создания нового экземпляра.Расширяется
Методы и атрибуты
-
template_name_field
¶ Поле на текущем экземпляре объекта, которое может быть использовано для определения имени шаблона-кандидата. Если либо само
template_name_field
, либо значениеtemplate_name_field
на текущем экземпляре объекта равноNone
, объект не будет использоваться для имени шаблона-кандидата.
-
template_name_suffix
¶ Суффикс, добавляемый к имени автоматически создаваемого шаблона кандидата. По умолчанию суффикс равен
_detail
.
-
get_template_names
()¶ Возвращает список имен шаблонов-кандидатов. Возвращает следующий список:
- значение
template_name
в представлении (если предусмотрено) - содержимое поля
template_name_field
на экземпляре объекта, над которым работает представление (если доступно) <app_label>/<model_name><template_name_suffix>.html
- значение
-