Cherrypy中的子页面和路由

时间:2020-01-10 23:04:45

标签: python cherrypy

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

我想要的结构是根页面/,概述页面/resources,然后是各个资源页面/resources/my_resource。我可能还会有其他页面/my_page,甚至还有/my_page/my_page2

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

1 个答案:

答案 0 :(得分:0)

回答一个问题。 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的配置中即可。

controller参数应指向拥有返回所需内容的函数的任何容器类。 action参数是该函数,应该具有常规的CherryPy装饰器。

编辑 同样值得注意的是,我认为这需要routes程序包,该程序包不包含或不依赖CherryPy。

相关问题