Содержание
4. Плагины — документация django cms 3.11.0
Наверх
Изменить эту страницу
Переключить боковую панель оглавления
В этом уроке мы возьмем простое приложение Django для опроса общественного мнения и интегрируем его в
CMS.
4.1. Создайте плагин модели
В models.py
of polls_cms_integration
добавить следующее:
из моделей импорта django.db из cms.models импортировать CMSPlugin из polls.models импортировать опрос класс PollPluginModel (CMSPlugin): опрос = модели.ForeignKey(опрос, on_delete=models.CASCADE) защита __str__(я): вернуть селф.опрос.вопрос
Это создает класс модели подключаемого модуля; все они наследуют от
базовый класс cms.models.pluginmodel.CMSPlugin
.
Примечание
Плагины django CMS наследуются от cms.models. pluginmodel.CMSPlugin
(или
их подкласс), а не моделей.Модель
.
Создание и запуск миграций:
python manage.py makemigrations polls_cms_integration python manage.py перенести polls_cms_integration
4.1.1. Класс плагина
Теперь создайте новый файл cms_plugins.py
в той же папке, где находится ваш models.py
.
Класс плагина отвечает за предоставление django CMS необходимых
информацию для рендеринга вашего плагина.
Для нашего плагина опроса мы напишем следующий класс плагина:
из cms.plugin_base импортировать CMSPluginBase из cms.plugin_pool импортировать plugin_pool из polls_cms_integration.models импортировать PollPluginModel из django.utils.translation импортировать gettext как _ @plugin_pool.register_plugin # зарегистрируйте плагин класс PollPluginPublisher (CMSPluginBase): model = PollPluginModel # модель, в которой сохраняются данные плагина модуль = _("Опросы") name = _("Poll Plugin") # название плагина в интерфейсе render_template = "polls_cms_integration/poll_plugin. html" def render(self, context, instance, placeholder): context.update({'экземпляр': экземпляр}) вернуть контекст
Примечание
Все классы плагинов должны наследовать от cms.plugin_base.CMSPluginBase
и должны зарегистрироваться в plugin_pool
.
Разумное соглашение для именования плагинов:
Вам не нужно следовать этому соглашению, но выберите то, которое имеет смысл, и придерживайтесь его.
4.1.2. Шаблон
Атрибут render_template
в классе подключаемого модуля является обязательным и сообщает подключаемому модулю, какой
render_template
для использования при рендеринге.
В этом случае шаблон должен находиться по адресу polls_cms_integration/templates/polls_cms_integration/poll_plugin.html
и выглядеть примерно так:
{{ instance.poll.question }}