Подстраницы и Маршрутизация в Cherrypy - PullRequest
1 голос
/ 11 января 2020

Недавно начал использовать CherryPy, и у меня возникли сложности при создании подстраниц.

Мне нужна структура root страница /, страница обзора /resources, а затем отдельный ресурс страницы /resources/my_resource. Скорее всего, у меня будут другие страницы /my_page и, возможно, /my_page/my_page2.

. Сначала я попытался использовать класс страниц «Home» для обработки страниц верхнего уровня с классом «Resource», украшенным cherrypy.popargs для обработки. страницы ресурсов.

Я запустил CherryPy следующим образом:

cherrypy.tree.mount(Home(), '/', home_conf)
cherrypy.tree.mount(Resource(), '/resource/', resource_conf)
cherrypy.engine.start()
cherrypy.engine.block()

Это заменило страницу /resource/ на отдельные страницы ресурсов. то есть они были поданы в /my_resource/ вместо /resource/my_resource

Я полагаю, что могу обойти это, используя метод cp_dispatch, но кажется неуклюжим обрабатывать разные URL-адреса по-разному. Есть ли лучший способ обработки подстраниц со структурой переменной или stati c?

1 Ответ

0 голосов
/ 29 января 2020

наткнулся на ответ. cp_dispatch может работать, но в CherryPy есть конструкция, которая делает именно то, что нам нужно.

ROUTES = cherrypy.dispatch.RoutesDispatcher()


ROUTES.connect(name='home', route="/my_route",
               controller=MyController(), action='index',
               conditions=dict(method=["GET"]))

Тогда нам просто нужно добавить пару ключей '/': {'request.dispatch': ROUTES} в конфигурацию, которую мы отправляем CherryPy.

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

EDIT Также стоит отметить, что я думаю, что для этого требуется пакет routes, не включенный или не зависящий от CherryPy.

...