3.4 примечания к выпуску¶
Самым значительным изменением в этом выпуске является удаление поддержки ревизий (т.е. функций отмены/повтора/восстановления на страницах) из основной части django CMS. Эта функциональность будет восстановлена в качестве опционального дополнения со временем, а пока она недоступна.
Что нового в версии 3.4¶
Изменен способ отображения плагинов CMS. HTML
div
с классомcms-plugin
больше не отображается вокруг каждого плагина CMS. Вместо этого используется комбинация теговtemplate
и JavaScript для добавления обработчиков событий и данных плагина непосредственно в разметку плагина. Это устраняет большинство проблем с рендерингом, вызванных дополнительной разметкой.Изменена реализация очистки кэша активов, которая теперь обрабатывается изменением пути, а не параметром
GET
.Добавлена возможность копирования страниц в дереве страниц с помощью интерфейса перетаскивания.
Сделано возможным использование многотабличного наследования для расширений Page/Title.
Переработана функциональность рендеринга плагина для ускорения времени загрузки как в режиме структуры, так и в режиме контента.
Добавлено новое сочетание клавиш
Shift
+Space
для переключения между режимом структуры и содержимого при выделении текущего плагина, показывая его положение.Улучшенная навигация по клавиатуре
Добавлена модальная подсказка о доступных сокращениях
Добавлено нечеткое сопоставление в подборщик плагинов.
Изменена утилита
downcast_plugins
, чтобы возвращать генератор вместо списка.Исправлена ошибка, из-за которой в режиме структуры отображался псевдозаголовок.
Исправлена ошибка, из-за которой псевдосозданный контент не отображался корректно без предварительной публикации страницы.
Добавлен текст подсказки к форме изменения плагина
Alias
при прикреплении к странице, чтобы показать редактору контента, откуда был сделан псевдоним контента.Удалена поддержка ревизий из ядра django CMS. В результате перестали поддерживаться параметры
CMS_MAX_PAGE_HISTORY_REVERSIONS
иCMS_MAX_PAGE_PUBLISH_REVERSIONS
, а также параметрwith_revision
вcms.api.create_page
иcms.api.create_title
.В
cms.plugin_base.CMSPluginBase
методыget_child_classes
иget_parent_classes
теперь реализованы как@classmethod
.
Обновление до версии 3.4¶
Требуется миграция базы данных, поскольку значение по умолчанию CMSPlugin.position было установлено в 0 вместо null.
Пожалуйста, убедитесь, что ваша текущая база данных согласована и находится в здоровом состоянии, и создайте копию базы данных, прежде чем продолжить работу..
Затем запустите:
python manage.py migrate
python manage.py cms fix-tree
Обратные несовместимые изменения¶
Крючки и панели инструментов¶
В соответствии с нашей политикой устаревания мы удалили обратно совместимый шим для cms_app.py
и cms_toolbar.py
. Если вы еще не сделали этого, переименуйте их в cms_apps.py
и cms_toolbars.py
.
Разрешения¶
Система разрешений была сильно переработана. В результате несколько внутренних функций и методов были удалены или изменены.
Функции удалены:
user_has_page_add_perm
has_page_add_permission
has_page_add_permission_from_request
has_any_page_change_permissions
has_auth_page_permission
has_page_change_permission
has_global_page_permission
has_global_change_permissions_permission
has_generic_permission
load_view_restrictions
get_any_page_view_permissions
Следующие методы были изменены и теперь требуют параметр пользователя вместо запроса:
Page.has_view_permission
Page.has_add_permission
Page.has_change_permission
Page.has_delete_permission
Page.has_delete_translation_permission
Page.has_publish_permission
Page.has_advanced_settings_permission
Page.has_change_permissions_permission
Page.has_move_page_permission
Они также устарели в пользу своих аналогов в cms.utils.page_permissions
.
Чтобы сохранить согласованность с разрешениями django CMS и разрешениями Django, мы изменили ванильную систему разрешений (CMS_PERMISSIONS = False
), чтобы требовать от пользователей наличия определенных разрешений Django для выполнения действия.
Вот обзор:
Действие |
Требуется разрешение |
---|---|
Добавить страницу |
Можно добавить страницу и изменить страницу |
Изменить страницу |
Можно изменить страницу |
Удалить страницу |
Можно изменить страницу и удалить страницу |
Переместить страницу |
Можно изменить страницу |
Опубликовать страницу |
Можно изменить страницу и можно опубликовать страницу |
Это изменение коснется только сотрудников, не являющихся суперпользователями.
Предупреждение
Если у вас есть пользовательское расширение Page
с настроенной панелью инструментов, обратитесь к обновленному example. В нем используются новые внутренние механизмы разрешения.
Ручной рендеринг плагинов¶
Мы переписали способ отображения плагинов и плейсхолдеров. В результате, если вы вручную выводите плагины и плейсхолдеры, вам придется адаптировать свой код под новый механизм вывода.
Чтобы программно вывести плагин, вам понадобится контекст и объект запроса.
Предупреждение
Ручной рендеринг плагинов не является публичным API, и поэтому он может быть изменен без предварительного уведомления.
from django.template import RequestContext
from cms.plugin_rendering import ContentRenderer
def render_plugin(request, plugin):
renderer = ContentRenderer(request)
context = RequestContext(request)
# Avoid errors if plugin require a request object
# when rendering.
context['request'] = request
return renderer.render_plugin(plugin, context)
Как и в случае с плагином, для программного отображения заполнителя вам понадобится контекст и объект запроса.
Предупреждение
Ручной рендеринг не является публичным API, и поэтому может быть изменен без предварительного уведомления.
from django.template import RequestContext
from cms.plugin_rendering import ContentRenderer
def render_placeholder(request, placeholder):
renderer = ContentRenderer(request)
context = RequestContext(request)
# Avoid errors if plugin require a request object
# when rendering.
context['request'] = request
content = renderer.render_placeholder(
placeholder,
context=context,
)
return content