Cherrypy 中的子页面和路由

Subpages and Routing in Cherrypy

最近开始使用 CherryPy,但我很难创建子页面。

我想要的结构是一个根页面 /、一个概览页面 /resources,然后是各个资源页面 /resources/my_resource。我可能会有其他页面 /my_page 并且可能 /my_page/my_page2.

我首先尝试使用 'Home' 页面 class 来处理顶级页面,并使用 'Resource' class 修饰 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 似乎很笨拙。有没有更好的方法来处理具有可变或静态结构的子页面?

找到一个答案。 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 的配置中。

控制器参数应指向任何容器 class 拥有 returns 所需内容的功能。 action 参数是那个函数,它应该有常规的 CherryPy 装饰器。

编辑 另外值得注意的是,我认为这需要 routes 包,不包含或依赖于 CherryPy。