Плагины¶
Ссылка на атрибуты и методы CMSPluginBase¶
- class cms.plugin_base.CMSPluginBase¶
Наследует
django.contrib.admin.ModelAdmin
и в большинстве аспектов ведет себя как обычный подкласс. Обратите внимание, что некоторые атрибутыModelAdmin
просто не будут иметь смысла в контексте Plugin.Атрибуты
- admin_preview¶
По умолчанию:
False
Если
True
, отображает предварительный просмотр в админке.
- allow_children¶
По умолчанию:
False
Позволяет этому плагину иметь дочерние плагины - другие плагины, размещенные внутри него?
Если
True
, вам необходимо убедиться, что ваш плагин может отображать свои дочерние элементы в шаблоне плагина. Например:{% load cms_tags %} <div class="myplugin"> {{ instance.my_content }} {% for plugin in instance.child_plugin_instances %} {% render_plugin plugin %} {% endfor %} </div>
instance.child_plugin_instances
предоставляет доступ ко всем дочерним элементам плагина. Они предварительно заполнены и готовы к использованию. Дочерние плагины должны быть отображены с помощью тега шаблона{% render_plugin %}
.См. также:
child_classes
,parent_classes
,require_parent
.
- cache¶
По умолчанию:
CMS_PLUGIN_CACHE
Можно ли кэшировать этот плагин? Если ваш плагин отображает содержимое в зависимости от пользователя, запроса или других динамических свойств, установите значение
False
.Если присутствует и имеет значение
False
, плагин будет предотвращать кэширование получаемой страницы.Важно
Установка значения
False
эффективно отключит кэш страниц CMS и все вышестоящие кэши для страниц, на которых появляется плагин. Это может быть полезно в некоторых случаях, но для общего управления кэшем лучше использовать более подходящее значениеget_cache_expiration()
.Предупреждение
Если вы отключили кэш плагина, обязательно перезапустите сервер и очистите кэш после этого.
- change_form_template¶
По умолчанию:
admin/cms/page/plugin_change_form.html
Шаблон, используемый для отображения формы при редактировании плагина.
Пример:
class MyPlugin(CMSPluginBase): model = MyModel name = _("My Plugin") render_template = "cms/plugins/my_plugin.html" change_form_template = "admin/cms/page/plugin_change_form.html"
См. также:
frontend_edit_template
.
- child_classes¶
По умолчанию:
None
Список имен классов плагинов. Если этот параметр установлен, в этот плагин могут быть добавлены только перечисленные здесь плагины.
См. также:
parent_classes
.
- disable_child_plugins¶
По умолчанию:
False
Отключает перетаскивание дочерних плагинов в режиме структуры.
- form¶
Класс пользовательской формы, который будет использоваться для редактирования этого плагина.
- frontend_edit_template¶
Этот атрибут устарел и будет удален в версии 3.5..
По умолчанию:
cms/toolbar/plugin.html
Шаблон, используемый для обертывания плагина при редактировании во фронтенде.
См. также:
change_form_template
.
- model¶
По умолчанию:
CMSPlugin
Если плагин требует настроек для каждого экземпляра, то этот параметр должен быть установлен на модель, которая наследуется от
CMSPlugin
.См. также: Хранение конфигурации.
- module¶
Группирует плагин в подборщике плагинов. Если атрибут модуля не указан, плагин попадает в группу «Generic».
- name¶
Будет отображаться в подборщике плагинов.
- page_only¶
По умолчанию:
False
Установите значение
True
, если этот плагин должен использоваться только в placeholder, прикрепленном к странице django CMS, а не в других моделях сPlaceholderFields
.См. также:
child_classes
,parent_classes
,require_parent
.
- parent_classes¶
По умолчанию:
None
Список имен допустимых родительских классов для этого плагина.
См. также:
child_classes
,require_parent
.
- render_plugin¶
Если установлено значение
False
, этот плагин не будет отображаться вообще. По умолчанию:True
Если
True
, тоrender_template()
также должно быть определено.См. также:
render_template
,get_render_template()
.
- render_template¶
По умолчанию:
None
Путь к шаблону, используемому для рендеринга шаблона. Если
render_plugin
равноTrue
, то либо это, либоget_render_template
**должны быть определены;См. также:
render_plugin
,get_render_template()
.
- require_parent¶
По умолчанию:
False
Требуется ли, чтобы этот плагин был дочерним для другого плагина? Или он может быть добавлен в любой placeholder, даже прикрепленный к странице.
См. также:
child_classes
,parent_classes
.
- text_enabled¶
По умолчанию:
False
Этот атрибут контролирует, будет ли ваш плагин использоваться (и отображаться) в текстовом плагине. Когда вы редактируете текстовый плагин на странице, плагин появится в выпадающем списке CMS Plugins, и его можно будет настроить и вставить. Вывод будет даже предварительно просматриваться в текстовом редакторе.
Конечно, не все плагины можно использовать в текстовых плагинах. Поэтому по умолчанию этот атрибут имеет значение
False
. Если ваш плагин является пригодным для использования в текстовом плагине:установите значение
True
убедитесь, что ваш плагин предоставляет свой собственный
icon_alt()
, он будет использоваться в качестве всплывающей подсказки в текстовом редакторе и пригодится, когда вы используете несколько плагинов в тексте.
См. также:
icon_alt()
,icon_src()
.
Методы
- get_plugin_urls(instance)¶
Возвращает шаблоны URL, для которых плагин хочет зарегистрировать представления. Они включаются в URLS администратора страниц django CMS в пути к плагину (например:
/admin/cms/page/plugin/<plugin-name>/
в случае по умолчанию).get_plugin_urls()
полезно, если ваш плагин должен асинхронно общаться с администратором.
- get_render_template()¶
Если вам нужно определить модель рендеринга плагина во время рендеринга, вы можете реализовать метод
get_render_template()
в классе плагина; этот метод принимает те же аргументы, что иrender
.Метод должен возвращать правильный путь к файлу шаблона.
Пример:
def get_render_template(self, context, instance, placeholder): if instance.attr = 'one': return 'template1.html' else: return 'template2.html'
См. также:
render_plugin()
,render_template()
Расширяет контекстное меню для всех заполнителей.
Чтобы добавить один или несколько пользовательских пунктов контекстного меню, которые отображаются в контекстном меню для всех заполнителей в режиме структуры, переопределите этот метод в связанном плагине, чтобы вернуть список экземпляров
cms.plugin_base.PluginMenuItem
.
Расширяет контекстное меню для всех плагинов.
Чтобы добавить один или несколько пользовательских пунктов контекстного меню, которые отображаются в контекстном меню для всех плагинов в режиме структуры, переопределите этот метод в связанном плагине, чтобы вернуть список экземпляров
cms.plugin_base.PluginMenuItem
.
Расширяет контекстное меню для конкретного плагина. Чтобы добавить один или несколько пользовательских пунктов контекстного меню, которые отображаются в контекстном меню для данного плагина в режиме структуры, переопределите этот метод в плагине, чтобы вернуть список экземпляров
cms.plugin_base.PluginMenuItem
.
- get_cache_expiration(self, request, instance, placeholder)¶
Предоставляет значение истечения срока действия местодержателю и, в свою очередь, странице для определения соответствующих заголовков Cache-Control для добавления в объект HTTPResponse.
Должен вернуть одно из:
None
Это означает, что плагин не будет учитываться при расчете срока действия страницы.
datetime
Определенная дата и время (с учетом часового пояса) в будущем, когда истечет срок действия содержимого этого плагина.
Важно
Возвращаемое значение
datetime
должно учитывать часовой пояс, иначе плагин будет проигнорирован (с предупреждением) при вычислении срока действия.int
Количество секунд, в течение которых содержимое этого плагина может быть кэшировано.
В
cms.constants
определены константы, которые могут быть полезны:EXPIRE_NOW
иMAX_EXPIRATION_TTL
.Целочисленное значение
0
(ноль) илиEXPIRE_NOW
фактически означает «не кэшировать». Отрицательные значения будут рассматриваться какEXPIRE_NOW
. Значения, превышающие значениеMAX_EXPIRATION_TTL
, будут установлены в это значение.Отрицательные значения
timedelta
или значения, превышающиеMAX_EXPIRATION_TTL
, также будут ранжироваться таким же образом.Аналогично, значения
datetime
раньше, чем сейчас, будут рассматриваться какEXPIRE_NOW
. Значения, превышающиеMAX_EXPIRATION_TTL
секунд в будущем, будут рассматриваться какMAX_EXPIRATION_TTL
секунд в будущем.- Параметры
request – Соответствующий
HTTPRequest
экземпляр.instance – Экземпляр
CMSPlugin
, который отображается.
- Тип результата
None
илиdatetime
илиint
- get_vary_cache_on(self, request, instance, placeholder)¶
Возвращает строку заголовка HTTP VARY или их список, который будет учитываться заполнителем и, в свою очередь, поведением страницы для кэширования.
Переопределение этого метода необязательно.
Должен вернуть одно из:
None
Это означает, что этот плагин не объявляет никаких заголовков для кэша, на которые можно было бы ориентироваться. (по умолчанию)
- строка
Имя заголовка, по которому будет изменяться кэширование.
- список строк
Список строк, каждая из которых соответствует заголовку для изменения кэша.
- icon_alt()¶
По умолчанию
icon_alt()
возвращает строку вида: «[тип плагина] - [экземпляр]», но может быть модифицирована так, чтобы возвращать что угодно.Эта функция принимает
instance
в качестве параметра и возвращает строку, которая будет использоваться в качествеalt
текста для предварительного просмотра или иконки плагина.Авторам плагинов с поддержкой текста следует рассмотреть возможность переопределения этой функции, поскольку в большинстве браузеров она будет отображаться в виде всплывающей подсказки. Это полезно, поскольку если один и тот же плагин используется несколько раз, эта всплывающая подсказка может предоставить информацию о его конфигурации.
icon_alt()
принимает 1 аргумент:instance
: Экземпляр модели плагина
Реализация по умолчанию выглядит следующим образом:
def icon_alt(self, instance): return "%s - %s" % (force_str(self.name), force_str(instance))
См. также:
text_enabled
,icon_src()
.
- icon_src(instance)¶
По умолчанию возвращается пустая строка, которая, если ее не переопределить, приведет к тому, что иконка вообще не будет отображаться, что, в свою очередь, сделает плагин недоступным для редактирования оператором внутри родительского текстового плагина.
Следовательно, это должно быть переопределено, когда для плагина
text_enabled
установлено значениеTrue
, чтобы вернуть путь к иконке для отображения в тексте текстового плагина.С тех пор как в djangocms-text-ckeditor появился встроенный предварительный просмотр плагинов, иконка больше не будет отображаться.
icon_src принимает 1 аргумент:
instance
: Экземпляр модели плагина
Пример:
def icon_src(self, instance): return settings.STATIC_URL + "cms/img/icons/plugins/link.png"
См. также:
text_enabled
,icon_alt()
- render(context, instance, placeholder)¶
Этот метод возвращает контекст, который будет использоваться для рендеринга шаблона, указанного в
render_template
.Метод
render()
принимает три аргумента:context
: Контекст, с которым отображается страница.instance
: экземпляр вашего плагина, который отображается.placeholder
: Имя отображаемого заполнителя.
Этот метод должен возвращать словарь или экземпляр
django.template.Context
, который будет использоваться как контекст для рендеринга шаблона плагина.По умолчанию этот метод будет добавлять
instance
иplaceholder
к контексту, что означает, что для простых плагинов нет необходимости перезаписывать этот метод.Если вы перезаписываете этот метод, рекомендуется всегда заполнять контекст значениями по умолчанию, вызывая метод render суперкласса:
def render(self, context, instance, placeholder): context = super().render(context, instance, placeholder) ... return context
- Параметры
context – Текущий контекст шаблона.
instance – Экземпляр плагина, который отображается.
placeholder – Имя местоположения, в котором находится плагин.
- Тип результата
dict
- text_editor_button_icon()¶
Когда
text_enabled
равноTrue
, этот плагин может быть добавлен в текстовый редактор, и для этого может существовать кнопка-иконка. Данный метод позволяет переопределить эту иконку.По умолчанию он возвращает
None
, и каждый плагин текстового редактора может иметь свой собственный значок возврата.text_editor_button_icon()
принимает 2 аргумента:editor_name
: Имя плагина текстового редактораicon_context
: Словарь, содержащий информацию о нужной иконке, такую как ширина, высота, тема и т.д.
Обычно этот метод должен возвращать URL иконки. Но это может зависеть от текстового редактора, поскольку требуемые параметры могут отличаться. Пожалуйста, обратитесь к документации плагина вашего текстового редактора.
Для этого требуется поддержка текстового плагина; поддержка этого плагина в настоящее время планируется в версии djangocms-text-ckeditor 2.5.0.
См. также:
text_enabled
.
- class cms.plugin_base.PluginMenuItem¶
- __init___(name, url, data, question=None, action='ajax', attributes=None)¶
Создает пункт в меню плагина/заместителя
- Параметры
name – Название элемента (этикетка)
url – URL, на который указывает элемент. Этот URL будет вызываться с помощью POST
data – Данные, которые должны быть отправлены на указанный выше URL-адрес
question – Подтверждающий текст, который будет показан пользователю перед вызовом данного URL (необязательно)
action – Пользовательское действие, которое будет вызываться при нажатии; в настоящее время поддерживаются: „ajax“, „ajax_add“
attributes – Словарь, содержимое которого будет добавлено в качестве данных-атрибутов к пункту меню
Справочник по атрибутам и методам CMSPlugin¶
- class cms.models.pluginmodel.CMSPlugin¶
См. также: Хранение конфигурации
Атрибуты
- translatable_content_excluded_fields¶
По умолчанию:
[ ]
Список полей плагина, которые не будут экспортироваться при использовании
get_translatable_content()
.См. также:
get_translatable_content()
,set_translatable_content()
.Методы
- copy_relations()¶
Обработка копирования любых отношений, связанных с этим плагином. Пользовательские плагины должны делать это самостоятельно.
copy_relations
принимает 1 аргумент:old_instance
: Исходный экземпляр плагина
См. также: Работа с отношениями,
post_copy()
.
- get_translatable_content()¶
Получите словарь всех полей содержимого (пары имя поля / значение поля) из плагина.
Пример:
from djangocms_text_ckeditor.models import Text plugin = Text.objects.get(pk=1).get_bound_plugin()[0] plugin.get_translatable_content() # returns {'body': u'<p>I am text!</p>\n'}
См. также:
translatable_content_excluded_fields
,set_translatable_content
.
- post_copy()¶
Может (должно) быть переопределено для обработки копирования плагинов, содержащих дочерние плагины, после копирования исходного родительского плагина.
post_copy
принимает 2 аргумента:old_instance
: Старый экземпляр плагинаnew_old_ziplist
: Список кортежей, содержащий новые копии и старые существующие дочерние плагины.
См. также: Работа с отношениями,
copy_relations()
.
- set_translatable_content()¶
Берет словарь полей плагина (пары имя поля / значение поля) и перезаписывает поля плагина. Возвращает
True
, если все поля были записаны успешно, иFalse
в противном случае.set_translatable_content
принимает 1 аргумент:fields
: Словарь, содержащий имена полей и переведенное содержимое каждого из них.
Пример:
from djangocms_text_ckeditor.models import Text plugin = Text.objects.get(pk=1).get_bound_plugin()[0] plugin.set_translatable_content({'body': u'<p>This is a different text!</p>\n'}) # returns True
См. также:
translatable_content_excluded_fields
,get_translatable_content()
.
- get_add_url()¶
Возвращает URL, который нужно вызвать для добавления экземпляра плагина; полезно для реализации специфической для плагина логики в пользовательском представлении.
- get_edit_url()¶
Возвращает URL, который нужно вызвать для редактирования экземпляра плагина; полезно для реализации специфической для плагина логики в пользовательском представлении.
- get_move_url()¶
Возвращает URL, который нужно вызвать для перемещения экземпляра плагина; полезно для реализации специфической для плагина логики в пользовательском представлении.
- get_delete_url()¶
Возвращает URL, который нужно вызвать для удаления экземпляра плагина; полезно для реализации специфической для плагина логики в пользовательском представлении.
- get_copy_url()¶
Возвращает URL, который нужно вызвать для копирования экземпляра плагина; полезно для реализации специфической для плагина логики в пользовательском представлении.
- class cms.plugin_pool.PluginPool¶