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。
最近开始使用 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。