Примечания к выпуску 3.0

Что нового в версии 3.0

Предупреждение

Обновление с предыдущих версий

В 3.0 внесены некоторые изменения, которые требуют действий, если вы переходите с предыдущей версии.

Примечание

See the quick upgrade guide

Новое редактирование фронтенда

django CMS 3.0 представляет новую систему редактирования фронтенда, а также настраиваемый скин администратора Django (djangocms_admin_style).

В новой системе Placeholders и их плагины больше не управляются в админке сайта, а только из фронтенда.

Кроме того, система теперь предлагает два вида редактирования:

  • Вид содержание, для редактирования конфигурации и содержимого плагинов.

  • представление структуры, в котором можно добавлять и переставлять плагины.

Заголовки страниц также можно изменять непосредственно во фронтенде.

Новая панель инструментов

Код панели инструментов был упрощен, а ее внешний вид обновлен. Теперь панель инструментов представляет собой более последовательный инструмент управления для добавления и изменения объектов. См. Как расширить панель инструментов.

Предупреждение

Обновление с предыдущих версий

В версии 3.0 для работы панели инструментов теперь требуется приложение django.contrib.messages.

Новые типы страниц

Теперь вы можете сохранять страницы как типы страниц. Если вы затем создадите новую страницу, вы можете выбрать тип страницы, и все плагины и содержимое будут предварительно заполнены.

Экспериментальная поддержка Python 3.3

Мы добавили экспериментальную поддержку Python 3.3. Поддержка Python 2.5 была прекращена.

Улучшенное многоязычное редактирование

Улучшения в среде django CMS для управления мультиязычным сайтом включают:

  • встроенный выбор языка для языков, которые еще не являются общедоступными.

  • настраиваемое поведение языка администратора сайта при переключении между языками редактируемого контента.

CMS_SEO_FIELDS

Настройка была удалена, вместе с набором полей SEO в админке.

  • Максимальная длина поля meta_description теперь равна 155 для оптимальной интеграции с Google.

  • page_title по умолчанию находится сверху.

  • Поле meta_keywords было удалено, так как оно больше не служит никакой цели.

CMS_MENU_TITLE_OVERWRITE

Новое значение по умолчанию для этой настройки - True.

Языки отката плагинов

Теперь можно указывать запасные языки для плейсхолдера, если плейсхолдер пуст для текущего языка. Это должно быть активировано в CMS_PLACEHOLDER_CONF для каждого местозаполнителя. По умолчанию установлено значение False для сохранения поведения до версии 3.0.

переключатель языка

Тег шаблона language_chooser теперь отображает только общедоступные языки. Чтобы изменить язык на непубличный, воспользуйтесь выбором языка на панели инструментов.

Отмена и повтор

Если у вас установлен django-reversion, то теперь опции undo и redo доступны прямо на панели инструментов. Теперь они могут изменять содержимое плагина, а также содержимое страницы.

Плагины удалены

Мы удалили плагины из ядра. Это сделано не потому, что от вас не ждут их использования, а потому, что django CMS не должен навязывать своим пользователям ненужный выбор того, что устанавливать.

Наиболее значимым из этих удалений является cms.plugins.text.

Мы предоставляем djangocms-text-ckeditor, текстовый плагин на основе CKEditor. Он доступен по адресу https://github.com/django-cms/djangocms-text-ckeditor. Вы, конечно, можете использовать предпочитаемый вами редактор; доступны и другие.

Кроме того, мы удалили из ядра следующие плагины и перенесли их в отдельные репозитории.

Примечание

Для того чтобы перейти со старого cms.plugins.X на новый djangocms_X плагин, просто установите новый плагин, удалите старый cms.plugins.X из settings.INSTALLED_APPS и добавьте к нему новый. Затем запустите миграции (python manage.py migrate djangocms_X).

Файловый плагин

Мы удалили файл-плагин (cms.plugins.file). Его новое местоположение находится по адресу:

В качестве альтернативы вы также можете использовать следующее (однако вы не сможете сохранить существующие файлы из старого cms.plugins.file!)

Flash Plugin

Мы удалили флеш-плагин (cms.plugins.flash). Его новое местоположение находится по адресу:

Плагин Googlemap

Мы удалили плагин Googlemap (cms.plugins.googlemap). Его новое местоположение находится по адресу:

Наследовать плагин

Мы удалили плагин inherit (cms.plugins.inherit). Его новое местоположение находится по адресу:

Picture Plugin

Мы удалили плагин картинок (cms.plugins.picture). Его новое местоположение находится по адресу:

Тизерный плагин

Мы удалили тизерный плагин (cms.plugins.teaser). Его новое местоположение находится по адресу:

Видеоплагин

Мы удалили плагин видео (cms.plugins.video). Его новое местоположение находится по адресу:

Плагин сниппетов

Мы удалили плагин сниппетов (cms.plugins.snippet). Его новое местоположение находится по адресу:

В качестве альтернативы вы также можете использовать следующее (однако вы не сможете сохранить существующие файлы из старого cms.plugins.snippet!)

Twitter Plugin

Twitter отключил V1 своего API, поэтому мы полностью удалили плагин twitter (cms.plugins.twitter).

В качестве альтернативы посмотрите на эти плагины:

Контекстные процессоры плагинов принимают новый аргумент

Контекст плагина был добавлен аргумент, чтобы остальная часть контекста была доступна для них. Если у вас есть существующие процессоры контекста плагина, вам нужно будет изменить сигнатуру их функций, чтобы добавить дополнительный аргумент.

Apphooks

Apphooks переместились из заголовка в модель страницы. Это означает, что вы больше не можете иметь отдельные apphooks для каждого языка. Добавлено новое поле application instance name.

Примечание

Обратный id больше не используется для пространства имен. Если вы ранее использовали apphooks с пространством имен, обязательно обновите свои страницы и заполните поля пространства имен.

Если вы используете приложения apphook с app_name для пространств имен приложений, обязательно заполните поле пространства имен экземпляра application instance name, поскольку теперь требуется, чтобы пространство имен было определено, если вы используете пространства имен приложений.

Для дальнейшего чтения о пространствах имен приложений, пожалуйста, обратитесь к документации Django по этому вопросу по адресу https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces.

request.current_app был удален. Если вы полагались на это, используйте следующий код вместо этого в ваших представлениях:

def my_view(request):
  current_app = resolve(request.path_info).namespace
  context = RequestContext(request, current_app=current_app)
  return render_to_response("my_templace.html", context_instance=context)

Подробности можно найти в Прикрепление приложения несколько раз.

PlaceholderAdmin

PlaceholderAdmin теперь является устаревшим. Вместо производных от admin.ModelAdmin введен новый класс-миксин PlaceholderAdminMixin, который должен использоваться вместе с admin.ModelAdmin. Поэтому при определении класса администратора модели, содержащего placeholder, теперь добавьте PlaceholderAdminMixin в список родительских классов вместе с admin.ModelAdmin.

В PlaceholderAdmin больше нет языковых вкладок, а редактор плагинов исчез. API плагина изменился и стал более последовательным. PageAdmin теперь использует тот же API, что и PlaceholderAdminMixin. Если ваше приложение взаимодействует с API плагина напрямую, обязательно прочитайте код и изменившиеся параметры. Если вы используете PlaceholderFields, вам следует добавить миксин PlaceholderAdminMixin, так как он предоставляет API для редактирования плагинов и заполнителей.

В будущем рабочий процесс должен выглядеть следующим образом:

  1. Создавайте новые экземпляры моделей с помощью панели инструментов или через администратора.

  2. Перейдите к представлению, которое представляет экземпляр модели, и добавьте содержимое с помощью редактирования во внешнем интерфейсе.

Разрешения на объекты-заполнители

В дополнение к разрешениям на уровне модели, Placeholder теперь проверяет, есть ли у пользователя разрешения на конкретный объект этой модели. Подробности можно найти здесь в Разрешения.

Места для размещения плагинов предварительно заполняются плагинами по умолчанию

В CMS_PLACEHOLDER_CONF для каждой конфигурации placeholder вы можете указать через „default_plugins“ список плагинов для автоматического добавления в placeholder, если он пуст. См. default_plugins in CMS_PLACEHOLDER_CONF.

Пользовательские ярлыки модулей и плагинов в пользовательском интерфейсе панели инструментов

Теперь можно настроить отображение ярлыков модулей и плагинов в пользовательском интерфейсе панели инструментов. Подробности смотрите в CMS_PLACEHOLDER_CONF.

Новая подкоманда copy-lang

Добавлена команда управления для копирования содержимого (заголовков и плагинов) с одного языка на другой.

Команда может быть запущена с помощью:

manage.py cms copy_lang from_lang to_lang

Пожалуйста, прочитайте cms copy lang перед использованием.

Фронтенд-редактор для моделей Django

Фронтенд-редактор доступен для любой модели Django; подробности см. в documentation.

Переместите все теги шаблонов в cms_tags.

Все теги шаблонов теперь находятся в пространстве имен cms_tags, поэтому для использования любых тегов шаблонов cms вы можете просто сделать:

{% load cms_tags %}

getter и setter для переводимого содержимого плагина

Переводимое содержимое плагина теперь может быть прочитано и установлено через get_translatable_content() и set_translatable_content(). Более подробную информацию смотрите в Custom Plugins.

Больше никакой магии с именами таблиц БД для плагинов

Начиная с django CMS 2.0 имена таблиц плагинов начинались с cmsplugin_. Мы убрали это поведение в версии 3.0 и будем выводить предупреждение об устаревании со старым и новым именем таблицы. Если ваш плагин использует юг для миграций, создайте новую пустую схему миграции и переименуйте таблицу вручную.

Предупреждение

При работе в оболочке django или кодировании на низком уровне, вы должны включить поведение обратной совместимости (оно же магическая проверка переименования), иначе неперемещенные плагины не будут работать. Для этого выполните следующий код:

>>> from cms.plugin_pool import plugin_pool
>>> plugin_pool.set_plugin_meta()

Этот код может быть выполнен как в оболочке, так и в ваших модулях python.

Добавлена поддержка пользовательских моделей пользователей

Начиная с Django 1.5 появилась возможность заменить модель пользователя по умолчанию на пользовательскую модель. Теперь это полностью поддерживается DjangoCMS, и, кроме того, в бегунок тестирования была добавлена новая опция, позволяющая указать модель пользователя для тестов (например, --user=customuserapp.User).

Кэширование страниц

Теперь страницы кэшируются по умолчанию. Вы можете отключить это поведение с помощью CMS_PAGE_CACHE.

Кэширование заполнителей

У плагинов появилось новое свойство по умолчанию: cache=True. Если все плагины, находящиеся на панели инструментов, установили это свойство в значение True, то вся панель инструментов будет кэшироваться, если панель инструментов не находится в режиме редактирования.

Предупреждение

Если ваш плагин динамический и обрабатывает данные текущего пользователя или запроса, обязательно установите cache=False.

Кэширование плагинов

У плагинов появился новый атрибут: cache=True. Его значение по умолчанию может быть настроено с помощью CMS_PLUGIN_CACHE.

Защита от Clickjacking на каждой странице

Добавлена расширенная опция, которая управляет заголовком X-Frame-Options на каждой странице. По умолчанию он наследуется от родительской страницы. Если ни один из предков не укажет значение, заголовок не будет установлен, позволяя собственному промежуточному программному обеспечению Django обработать его (если включено).

Контекстная переменная CMS_TEMPLATE

В контексте теперь доступна новая переменная CMS_TEMPLATE: она содержит путь к текущему шаблону страницы. Подробнее см. в CMS_TEMPLATE reference.

Обновление с версии 2.4

Примечание

Есть сообщения о том, что обновление CMS с версии 2.4 до 3.0 может завершиться неудачей, если установлена панель инструментов Django Debug Toolbar. Пожалуйста, удалите/отключите Django Debug Toolbar и другие несущественные приложения перед попыткой обновления, а затем, после завершения, снова включите их, следуя инструкциям «Explicit setup».

Если вы хотите перейти с версии 2.4 на 3.0, вам нужно сделать несколько вещей. Начните с обновления пакета cms:

pip install django-cms==3.0

Далее вам необходимо внести следующие изменения в ваш settings.py.

  • settings.INSTALLED_APPS

    • Удалите cms.plugin.twitter. Этот пакет был устаревшим, см. Twitter Plugin.

    • Переименуйте все остальные cms.plugins.X в djangocms_X, см. Плагины удалены.

  • settings.CONTEXT_PROCESSORS

    • Замените cms.context_processors.media на cms.context_processors.cms_settings

После этого установите все ваши ранее переименованные плагины ex-core (djangocms-whatever). Вот полный список, но вам, вероятно, не понадобятся все из них:

pip install djangocms-file
pip install djangocms-flash
pip install djangocms-googlemap
pip install djangocms-inherit
pip install djangocms-picture
pip install djangocms-teaser
pip install djangocms-video
pip install djangocms-link
pip install djangocms-snippet

Также, пожалуйста, проверьте свои шаблоны, чтобы убедиться, что вы не вставили тег {% cms_toolbar %} в тег {% block %}. В версии 3.0 это больше не допускается.

В завершение, пожалуйста, обновите свою базу данных:

python manage.py syncdb
python manage.py migrate  (answer yes if your prompted to delete stale content types)

Наконец, ваши существующие страницы будут неопубликованы, поэтому опубликуйте их с помощью команды publisher:

python manage.py publisher_publish

Вот и все!

Ожидаемые изъятия

placeholder_tags

placeholder_tags теперь устарел, тег шаблона render_placeholder теперь может быть загружен из библиотеки тегов шаблона cms_tags.

Использование placeholder_tags приведет к возникновению DeprecationWarning.

placeholder_tags будет удален в версии 3.1.

cms.context_processors.media

cms.context_processors.media теперь устарел, пожалуйста, используйте cms.context_processors.cms_settings, обновив TEMPLATE_CONTEXT_PROCESSORS в настройках

Использование cms.context_processors.media приведет к возникновению DeprecationWarning.

cms.context_processors.media будет удален в версии 3.1.

Вернуться на верх