2.4 примечания к выпуску¶
Что нового в версии 2.4¶
Предупреждение
Обновление с предыдущих версий
В 2.4 внесены некоторые изменения, которые требуют действий, если вы переходите с предыдущей версии.
Вам необходимо прочитать разделы Капитальный ремонт миграционной системы и Добавлена команда проверки ниже.
Введена поддержка Django 1.5, прекращена поддержка Django 1.3 и Python 2.5¶
В Django CMS 2.4 появилась поддержка Django 1.5.
В версии django CMS 2.4 мы отказались от поддержки Django 1.3 и Python 2.5. Теперь Django 1.4 и Python 2.6 являются минимально необходимыми версиями.
Капитальный ремонт миграционной системы¶
В версии 2.4 миграции были полностью переписаны для решения проблем с новыми релизами South.
Чтобы облегчить процесс обновления, все миграции для приложения cms были объединены в один файл миграции 0001_initial.py.
миграция 0001 - это реальная миграция, которая приводит вас к той же точке, что и миграции 0001-0036.
миграции с 0002 по 0036 включительно все еще существуют, но теперь это все пустые миграции
миграции 0037 и более поздние - это новые миграции
Как это влияет на вас¶
Если вы начинаете с новой установки, вам не нужно беспокоиться об этом. Даже не утруждайте себя чтением этого раздела; он предназначен для тех, кто обновляет систему.
Если вы используете версию 2.3.2 или более новую, вам также не нужно беспокоиться об этом.
Если вы используете версию 2.3.1 или более старую, вам необходимо выполнить двухэтапный процесс.
Сначала вам нужно будет обновить версию 2.3.3, чтобы привести историю миграций в соответствие с новой схемой. Затем вам нужно будет выполнить миграции для 2.4.
Для двухэтапного процесса обновления сделайте следующее в основном каталоге вашего проекта:
pip install django-cms==2.3.3
python manage.py syncdb
python manage.py migrate
pip install django-cms==2.4
python manage.py migrate
Добавлена команда удаления осиротевших плагинов¶
Добавлена команда управления для удаления бесхозных плагинов из базы данных.
Команда может быть запущена с помощью:
manage.py cms delete_orphaned_plugins
Пожалуйста, прочитайте cms delete-orphaned-plugins перед использованием.
Добавлена команда проверки¶
Добавлена команда управления для проверки конфигурации и среды.
Чтобы использовать эту команду, просто выполните:
manage.py проверка cms
Это заменяет старые проверки во время выполнения.
CMS_MODERATOR¶
Была удалена, так как больше не используется. Начиная с версии 2.4, все страницы существуют в публичной и черновой версии. Пользователи с правом publish_page
могут публиковать изменения на публичном сайте.
Требуется команда управления
Чтобы обновить предыдущую версию базы данных вашего сайта, вам нужно выполнить команду manage.py cms moderator on
. Никогда не выполняйте эту команду без предварительной проверки на наличие бесхозных плагинов, используя команду cms list plugins
. Если она сообщит о проблемах, выполните manage.py cms delete_orphaned_plugins
. Выполнение cms moderator
с бесхозными плагинами приведет к неудаче и оставит плохие данные в вашей базе данных. См. cms list и cms delete-orphaned-plugins.
Также проверьте, что все ваши плагины определяют метод copy_relations()
, если это необходимо. Вы можете сделать это, выполнив manage.py cms check
и прочитав раздел Presence of «copy_relations «. См. Работа с отношениями для руководства по этой теме.
Добавлена команда Fix MPTT Management¶
Добавлена команда управления для исправления данных дерева MPTT.
Команда может быть запущена с помощью:
manage.py cms fix-mptt
Удалена программа MultilingualMiddleware¶
Мы удалили MultilingualMiddleware. Это позволило избавиться от довольно непривлекательного «обезьяньего» исправления функции reverse()
. В качестве преимущества мы теперь поддерживаем локализацию URL и URL apphook с помощью стандартных помощников Django.
Для django 1.4 дополнительную информацию можно найти здесь:
Если вы все еще используете django 1.3, вы можете достичь той же функциональности с помощью django-i18nurl. Это бэкпорт новой функциональности в django 1.4, который можно найти здесь:
Что вам нужно сделать:
Удалите
cms.middleware.multilingual.MultilingualURLMiddleware
из ваших настроек.Убедитесь, что
django.middleware.locale.LocaleMiddleware
находится в ваших настройках, и что он идет после SessionMiddleware.Убедитесь, что
cms.urls
включено вi18n_patterns
:from django.conf.urls.i18n import i18n_patterns from django.contrib import admin from django.conf import settings from django.urls import * admin.autodiscover() urlpatterns = i18n_patterns('', re_path(r'^admin/', include(admin.site.urls)), re_path(r'^', include('cms.urls')), ) if settings.DEBUG: urlpatterns = patterns('', re_path(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), re_path(r'', include('django.contrib.staticfiles.urls')), ) + urlpatterns
Измените url и обратные вызовы к языковым пространствам имен. Теперь мы поддерживаем django способ вызова урлов других языков либо через тег шаблона
{% language %}
, либо через вызов функцииactivate("de")
в представлениях.До:
{% url "de:myview" %}
После:
{% load i18n %}{% language "de" %} {% url "myview_name" %} {% endlanguage %}
обратные урлы теперь также возвращают префикс языка. Возможно, существует код, который добавляет языковые префиксы. Удалите этот код.
CMS_LANGUAGES¶
Настройки CMS_LANGUAGES
были переработаны. Теперь это не список кортежей, как в настройках LANGUAGES
.
Пример объясняет больше, чем тысячи слов:
CMS_LANGUAGES = {
1: [
{
'code': 'en',
'name': gettext('English'),
'fallbacks': ['de', 'fr'],
'public': True,
'hide_untranslated': True,
'redirect_on_fallback':False,
},
{
'code': 'de',
'name': gettext('Deutsch'),
'fallbacks': ['en', 'fr'],
'public': True,
},
{
'code': 'fr',
'name': gettext('French'),
'public': False,
},
],
2: [
{
'code': 'nl',
'name': gettext('Dutch'),
'public': True,
'fallbacks': ['en'],
},
],
'default': {
'fallbacks': ['en', 'de', 'fr'],
'redirect_on_fallback':True,
'public': False,
'hide_untranslated': False,
}
}
Для получения более подробной информации о значении всех параметров, пожалуйста, обратитесь к документации CMS_LANGUAGES
.
Следующие настройки больше не нужны и были удалены:
CMS_HIDE_UNTRANSLATED
CMS_LANGUAGE_FALLBACK
CMS_LANGUAGE_CONF
CMS_SITE_LANGUAGES
CMS_FRONTEND_LANGUAGES
Пожалуйста, удалите их из своего settings.py
.
CMS_FLAT_URLS¶
Был помечен как устаревший в версии 2.3 и теперь удален.
Плагины в разделе Плагины¶
Мы добавили возможность располагать плагины в плагинах. До сих пор это поддерживал только TextPlugin. В демонстрационных целях мы создали плагин MultiColumn. Его возможности безграничны. Представьте себе: StylePlugin, TablePlugin, GalleryPlugin и т.д.
Плагин для колонок можно найти здесь:
На данный момент ограничение состоит в том, что плагины в плагинах можно редактировать только во фронтенде.
Вот пример плагина MultiColumn:
class MultiColumnPlugin(CMSPluginBase):
model = MultiColumns
name = _("Multi Columns")
render_template = "cms/plugins/multi_column.html"
allow_children = True
child_classes = ["ColumnPlugin"]
Появились 2 новых свойства для плагинов:
разрешить_детей
Boolean Если установлено значение True, это позволяет добавлять плагины.
детские_классы
Список Список классов плагинов, которые могут быть добавлены к этому плагину. Если он не указан, вы можете добавить все плагины, которые доступны в этом местоположении.
Как отобразить дочерние плагины в шаблоне¶
Мы вводим новый тег шаблона в cms_tags под названием {% render_plugin %}
Вот пример того, как плагин MultiColumn использует его:
{% load cms_tags %}
<div class="multicolumn">
{% for plugin in instance.child_plugins %}
{% render_plugin plugin %}
{% endfor %}
</div>
Как вы можете видеть, дочерние элементы доступны через атрибут children плагина.
Новый способ работы с настройками django CMS¶
Если у вас есть код, которому нужно получить доступ к настройкам django CMS (настройки с префиксом CMS_
или PLACEHOLDER_
), вы должны были использовать, например, from django.conf import settings; settings.CMS_TEMPLATES
. Это больше не гарантирует возврат нормальных значений, вместо этого вы должны использовать cms.utils.conf.get_cms_setting
, который принимает в качестве аргумента имя настройки **без префикса CMS_
и возвращает настройку.
Пример старого, ныне устаревшего стиля:
from django.conf import settings
settings.CMS_TEMPLATES
settings.PLACEHOLDER_FRONTEND_EDITING
Следует заменить на новый API:
from cms.utils.conf import get_cms_setting
get_cms_setting('TEMPLATES')
get_cms_setting('PLACEHOLDER_FRONTEND_EDITING')
Добавлен модуль cms.constants
¶
Этот выпуск добавляет модуль cms.constants
, который будет хранить общие значения констант django CMS. В настоящее время он содержит только TEMPLATE_INHERITANCE_MAGIC
, который раньше находился в cms.conf.global_settings
, но был перемещен в новый модуль cms.constants
в упомянутом выше обновлении настроек.
интеграционные изменения django-reversion¶
django-reversion Интеграция изменилась. Из-за огромных баз данных через некоторое время мы вносим некоторые изменения в способ обработки правок для страниц.
Сохраняются только изменения, внесенные при публикации. Все остальные правки удаляются при публикации страницы.
По умолчанию сохраняются только последние 25 ревизий публикаций. Вы можете изменить это поведение с помощью новой настройки
CMS_MAX_PAGE_PUBLISH_REVERSIONS
.
PlaceholderAdmin поддерживает i18n¶
Если вы используете вкладки в других приложениях или моделях, теперь мы поддерживаем более одного языка. Если вы просто используете PlaceholderAdmin
, то будут отображаться языковые вкладки, как в cms. Если вы используете django-hvad, то будут использоваться языковые вкладки hvad.
Если вы хотите отключить это поведение, вы можете установить render_placeholder_language_tabs = False
в вашем классе Admin, который расширяет PlaceholderAdmin. Если вы используете пользовательский change_form_template
, обязательно посмотрите cms/templates/admin/placeholders/placeholder/change_form.html
о том, как включить языковые вкладки.
Добавлено CMS_RAW_ID_USERS¶
Если у вас много пользователей (500+), вы можете установить этот параметр на число, после которого поля пользователя администратора будут отображаться в необработанном поле Id. Это значительно повышает производительность админки, так как ей не нужно загружать всех пользователей в html.
Обратные несовместимые изменения¶
Новые минимальные требования к зависимостям¶
Django 1.3 и Python 2.5 больше не поддерживаются.
Ожидаемые изъятия¶
simple_language_changer
будет удален в версии 3.0. Исправление ошибки делает это излишним, так как каждый неуправляемый URL будет вести себя подобным образом.