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