3. Интеграция приложений¶
Все последующие разделы этого руководства посвящены различным способам интеграции других приложений в django CMS. Простота, с которой другие приложения могут быть встроены в сайты django CMS, является важной особенностью системы.
Интеграция приложений означает не просто установку их рядом с django CMS, чтобы они мирно сосуществовали. Это значит использовать возможности django CMS, чтобы собрать их в единый целостный веб-проект, который ускоряет работу по управлению сайтом и делает возможным более богатую и автоматизированную публикацию.
Ключевым моментом в интеграции django CMS является то, что она не требует от вас модификации других приложений, если вы этого не хотите. Это особенно важно, когда вы используете сторонние приложения и не хотите поддерживать свои собственные форкнутые версии. (Единственное исключение - если вы решите встроить функции django CMS непосредственно в сами приложения, например, при использовании placeholders in other applications).
В этом учебнике мы возьмем базовый Django opinion poll application и интегрируем его в CMS.
Так мы и сделаем:
включить приложение «Опросы» в проект
создать второе, независимое приложение Polls/CMS Integration для управления интеграцией
Таким образом, мы сможем интегрировать приложение «Опросы», не меняя в нем ничего.
3.1. Включите приложение polls
¶
3.1.1. Установить polls
¶
Установите приложение из его репозитория GitHub, используя pip
:
pip install git+http://git@github.com/divio/django-polls.git#egg=polls
Давайте добавим это приложение в наш проект. Добавьте 'polls'
в конец INSTALLED_APPS
в settings.py вашего проекта (см. примечание к Настройка INSTALLED_APPS о порядке).
Добавьте конфигурацию URL poll
в urlpatterns
в urls.py
проекта:
urlpatterns += i18n_patterns(
re_path(r'^admin/', include(admin.site.urls)),
re_path(r'^polls/', include('polls.urls')),
re_path(r'^', include('cms.urls')),
)
Обратите внимание, что он должен быть включен перед строкой для URL django CMS. Шаблон URL django CMS должен быть последним, потому что он «поглощает» все, что еще не было сопоставлено предыдущим шаблоном.
Теперь запустите миграции приложения:
python manage.py migrate polls
На этом этапе вы должны иметь возможность войти в админку Django - http://localhost:8000/admin/
- и найти приложение Polls.
Создайте новый Опрос, например:
Вопрос: *Какой браузер вы предпочитаете?
Выборы:
Сафари
Firefox
Хром
Теперь, если вы посетите http://localhost:8000/en/polls/
, вы сможете увидеть опубликованный опрос и отправить ответ.
3.1.2. Улучшение шаблонов для опросов¶
Вы заметили, что в приложении «Опросы» у нас только минимальные шаблоны, нет навигации и стиля.
С другой стороны, наши страницы django CMS имеют доступ к нескольким шаблонам по умолчанию в проекте, все из которых расширяют один под названием base.html
. Итак, давайте улучшим это, переопределив базовый шаблон приложения polls.
Мы сделаем это в каталоге project.
В mysite/templates
добавьте polls/base.html
, содержащий:
{% extends 'base.html' %}
{% block content %}
{% block polls_content %}
{% endblock %}
{% endblock %}
Снова обновите страницу /polls/
, которая теперь должна быть правильно интегрирована в сайт.
3.2. Установите новое приложение polls_cms_integration
¶
Однако пока что приложение Polls интегрировано в проект, но не в саму django CMS. Эти два приложения полностью независимы. Они не могут использовать данные или функциональность друг друга.
Давайте создадим новое приложение Polls/CMS Integration, в котором мы объединим их вместе.
3.2.1. Создайте приложение¶
Создайте новый пакет в корне проекта под названием polls_cms_integration
:
python manage.py startapp polls_cms_integration
Теперь наша рабочая область выглядит следующим образом:
tutorial-project/
media/
mysite/
polls_cms_integration/ # the newly-created application
__init__.py
admin.py
models.py
migrations.py
tests.py
views.py
static/
manage.py
project.db
requirements.txt
3.2.2. Добавьте его к INSTALLED_APPS
.¶
Далее необходимо интегрировать приложение polls_cms_integration
в проект.
Добавьте polls_cms_integration
к INSTALLED_APPS
в settings.py
- и теперь мы готовы использовать его, чтобы начать интеграцию Polls с django CMS. Начнем с developing a Polls plugin.
Примечание
**Добавление шаблонов в проект или в приложение?
Ранее мы добавили в проект новые шаблоны. С таким же успехом мы могли бы добавить templates/polls/base.html
внутрь polls_cms_integration
. В конце концов, именно там мы будем выполнять всю остальную работу по интеграции.
Однако теперь у нас есть приложение, которое делает предположения об имени шаблона, который оно должно расширить (см. первую строку созданного нами шаблона base.html
), что может оказаться неверным для другого проекта.
Кроме того, нам придется убедиться, что polls_cms_integration
идет перед polls
в INSTALLED_APPS
, иначе шаблоны в polls_cms_integration
фактически не будут перекрывать шаблоны в polls
. Помещение их в проект гарантирует, что они будут переопределять шаблоны во всех приложениях.
Любой из этих способов является разумным, если вы понимаете их последствия.