• en
  • Language: ru
  • 3.7.x
  • Documentation version: 3.9

Добавлено в версии 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...