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 %}
    
  • обратные урлы теперь также возвращают префикс языка. Возможно, существует код, который добавляет языковые префиксы. Удалите этот код.

Добавлена программа LanguageCookieMiddleware

Чтобы исправить поведение django, определяющего язык каждый раз заново, когда вы посещаете / на странице, это промежуточное ПО сохраняет текущий язык в cookie при каждом ответе.

Чтобы включить это промежуточное ПО, добавьте следующее в настройку MIDDLEWARE_CLASSES:

cms.middleware.language.LanguageCookieMiddleware

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 Интеграция изменилась. Из-за огромных баз данных через некоторое время мы вносим некоторые изменения в способ обработки правок для страниц.

  1. Сохраняются только изменения, внесенные при публикации. Все остальные правки удаляются при публикации страницы.

  2. По умолчанию сохраняются только последние 25 ревизий публикаций. Вы можете изменить это поведение с помощью новой настройки CMS_MAX_PAGE_PUBLISH_REVERSIONS.

Изменения в теге шаблона show_sub_menu

У show_sub_menu появилось два новых параметра. Первый остался прежним: сколько уровней меню должно быть отображено.

Второй: root_level (по умолчанию=None), указывает, на каком уровне, если таковой имеется, должно располагаться корневое меню. Например, если root_level равен 0, то меню будет начинаться с этого уровня, независимо от того, на каком уровне находится текущая страница.

Третий аргумент: nephews (по умолчанию=100), указывает, сколько уровней племянников (детей братьев и сестер) будет показано.

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 будет вести себя подобным образом.

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