最近开始使用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似乎很笨拙。有没有更好的方法来处理具有可变或静态结构的子页面?

最佳答案

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

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

编辑
同样值得一提的是,我认为这需要routes软件包,该软件包不包含或不依赖CherryPy。

关于python - Cherrypy中的子页面和路由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59690080/

10-13 02:59
查看更多