Добавлено в версии 3.2.
Мастера создания контента¶
Введение в создание мастеров см. в How-to section on wizards.
Классы мастеров являются подклассами cms.wizards.wizard_base.Wizard
.
Они должны быть зарегистрированы с помощью cms.wizards.wizard_pool.wizard_pool
:
wizard_pool.register(my_app_wizard)
Наконец, необходимо создать мастера, например:
my_app_wizard = MyAppWizard(
title="New MyApp",
weight=200,
form=MyAppWizardForm,
description="Create a new MyApp instance",
)
При инстанцировании объекта Wizard используйте ключевые слова:
- название
Название мастера. Оно будет отображаться крупным шрифтом в «меню» мастера.
- вес
«Вес» мастера при определении порядка сортировки.
- форма
Форма, которую следует использовать для этого мастера. Она обязательна, но может быть подклассифицирована из django.forms.form или django.forms.ModelForm.
- модель
Если выше используется форма, то этот аргумент ключевого слова должен быть предоставлен и содержать класс модели. Он используется для определения уникальной «подписи» мастера, помимо всего прочего.
- имя шаблона
Дополнительно может быть предоставлен шаблон.
- описание
Описание необязательно, но если оно не указано, CMS создаст его на основе шаблона: «Создать новый экземпляр «model.verbose_name»».
- edit_mode_on_success
Если установлено, CMS переключит пользователя в режим редактирования, добавив параметр
edit
в строку запроса URL, возвращенного параметромget_success_url
. По умолчанию этоTrue
.
Базовый мастер¶
Все классы мастеров должны наследоваться от cms.wizards.wizard_base.Wizard
. Этот класс реализует ряд методов, которые могут быть переопределены по мере необходимости.
Методы базового мастера¶
получить_описание¶
Просто возвращает свойство description
, назначенное при инстанцировании, или свойство, полученное из модели, если описание не было предоставлено при инстанцировании. Переопределите этот метод, если это необходимо определить программно.
get_title¶
Просто возвращает свойство title
, присвоенное во время инстанцирования. Переопределите этот метод, если это нужно определить программно.
get_success_url¶
После завершения работы мастера пользователь будет перенаправлен на URL нового объекта, который был создан. По умолчанию это делается путем возврата результата вызова метода get_absolute_url
на объекте. Затем этот метод может быть изменен, чтобы перевести пользователя в режим редактирования, если свойство мастера edit_mode_on_success
равно True.
В некоторых случаях созданный контент не будет реализовывать get_absolute_url
или перенаправление пользователя нежелательно. В этих случаях просто переопределите этот метод. Если get_success_url
возвращает None
, CMS будет просто перенаправлять на текущую страницу после создания объекта.
Этот метод вызывается CMS с параметром:
- obj
Созданный объект
- kwargs
Произвольные аргументы ключевых слов
получить_вес¶
Просто возвращает свойство weight
, присвоенное во время инстанцирования. Переопределите этот метод, если это нужно определить программно.
user_has_add_permission¶
Этот параметр должен возвращать булево значение, отражающее, имеет ли пользователь разрешение на создание базового содержимого для мастера.
Этот метод вызывается CMS с данными параметрами:
- пользователь
Текущий пользователь
- страница
Текущая страница CMS, которую просматривает пользователь при вызове мастера
wizard_pool
¶
wizard_pool
включает свойство только для чтения discovered
, которое возвращает булево значение True
, если обнаружение мастера уже произошло, и False
в противном случае.
Методы работы с пулом мастеров¶
is_registered¶
Иногда может потребоваться проверить, был ли зарегистрирован конкретный мастер. Для этого просто вызовите:
value = wizard_pool.is_registered(«wizard»)
регистр¶
Вы можете заметить из приведенного выше примера, что последней строкой в коде примера является:
wizard_pool.register(my_app_wizard)
Подобные вещи должны выглядеть очень знакомо, поскольку аналогичный подход используется для cms_apps, тегов шаблонов и даже для админки Django.
Вызов метода register
пула мастеров приведет к регистрации предоставленного мастера в пуле, если только уже не существует мастер с тем же модулем и именем класса. В этом случае метод register вызовет ошибку cms.wizards.wizard_pool.AlreadyRegisteredException
.
снять с регистрации¶
Может оказаться полезным снять регистрацию мастеров, которые уже были зарегистрированы в пуле. Для этого просто вызовите:
value = wizard_pool.unregister(«wizard»)
Возвращаемое значение будет булевым: True
, если мастер был успешно снят с регистрации, или False
в противном случае.
get_entry¶
Если вы хотите получить ссылку на конкретного мастера в пуле, просто вызовите get_entry()
следующим образом:
wizard = wizard_pool.get_entry(my_app_wizard)
get_entries¶
get_entries()
полезен, если требуется иметь список всех зарегистрированных мастеров. Обычно это используется для итерационного перебора всех мастеров. Обратите внимание, что они будут возвращены в порядке их weight
: наименьшие числа для веса возвращаются первыми.:
for wizard in wizard_pool.get_entries():
# do something with a wizard...