5. Apphooks

Сейчас наше приложение Django Polls статически подключено к проекту urls.py. Это хорошо, но мы можем сделать больше, присоединяя приложения к страницам django CMS.

5.1. Создайте apphook

Мы делаем это с помощью apphook, созданного с помощью подкласса CMSApp, который сообщает CMS, как включить это приложение.

5.1.1. Создайте класс apphook

Apphooks живут в файле под названием cms_apps.py, поэтому создайте его в вашем приложении Polls/CMS Integration, т.е. в polls_cms_integration.

Это очень простой пример apphook для приложения django CMS:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool


@apphook_pool.register  # register the application
class PollsApphook(CMSApp):
    app_name = "polls"
    name = "Polls Application"

    def get_urls(self, page=None, language=None, **kwargs):
        return ["polls.urls"]

В этом уроке PollsApphook мы сделали несколько ключевых вещей:

  • Атрибут app_name дает системе уникальный способ обращения к apphook. Из Django Polls видно, что пространство имен приложения polls жестко закодировано в приложении, поэтому этот атрибут **должен быть polls.

  • name - это человекочитаемое имя, которое будет отображаться для пользователя-администратора.

  • Метод get_urls() - это то, что фактически подключает приложение, возвращая список конфигураций URL, которые будут активны везде, где используется apphook - в данном случае будет использоваться urls.py из polls.

5.1.2. Удалите старую запись polls из urls.py проекта.

Теперь вы должны удалить запись для приложения «Опросы»:

re_path(r'^polls/', include('polls.urls', namespace='polls'))

из urls.py вашего проекта.

Он не только не требуется, поскольку мы обращаемся к опросам через apphook, но если вы оставите его там, он будет конфликтовать с обработкой URL apphook. Вы получите предупреждение в журналах:

URL namespace 'polls' isn't unique. You may not be able to reverse all URLs in this namespace.

5.1.3. Перезапустите сервер выполнения

Перезапустите сервер runserver. Это необходимо, поскольку мы создали новый файл, содержащий код Python, который не будет загружен до перезапуска сервера. Это нужно сделать только при первом создании нового файла.

5.2. Применить apphook к странице

Теперь нам нужно создать новую страницу и прикрепить к ней приложение Polls с помощью этого apphook.

Создайте и сохраните новую страницу, а затем опубликуйте ее.

Примечание

Ваш apphook не будет работать, пока страница не будет опубликована.

В Дополнительных настройках (на панели инструментов выберите Страница > Дополнительные настройки…) выберите «Приложение для опросов» из всплывающего меню Приложение и сохраните еще раз.

select the 'Polls' application

Обновите страницу, и вы увидите, что приложение Polls теперь доступно прямо с новой страницы django CMS.

Важно

Не добавляйте дочерние страницы к странице с apphook.

apphook «заглатывает» все URL ниже страницы, передавая их подключенному приложению. Если у вас есть дочерние страницы страницы apphooked, django CMS не сможет их надежно обслуживать.

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