Django cms plugins: Repositories & Plugins — django CMS

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 }}

{% csrf_token%} <дел> {% для выбора в instance. poll.choice_set.all %} <дел> <метка> {{выбор.выбор_текста}}
{% конец для %}