2011-10-05 78 views
2

我试图从标准CherryPy调度切换到RoutesDispatcher的CherryPy应用程序。使用CherryPy调度路由

以下Python代码路径/正确使用标准CherryPy分派。我的目标是将此相同的代码转换为使用RoutesDispatcher运行。我用我发现的代码片断了,但一直没能找到使用Routes的CherryPy应用程序的完整示例。

class ABRoot: 

    def index(self): 
     funds = database.FundList() 
     template = lookup.get_template("index.html") 
     return template.render(fund_list=funds) 

index.exposed = True 

if __name__ == '__main__': 
    cherrypy.quickstart(ABRoot(), '/', 'ab.config') 

我徘徊在试图结合我发现没有任何运气的各种部分教程的代码。

我必须对__main__进行哪些更改才能通过RoutesDispatcher加载和路由?

回答

3

这是我最终得到的代码。我需要修改,使那些不立即明显对我说:

  1. 我不得不从一个文件移到我的配置,以一本字典,这样我可以调度添加到它。

  2. 我必须在cherrypy.quickstart之前调用cherrypy.mount。

  3. 我必须包括dispatcher.explicit = False

我希望任何人处理这个问题找到这个答案有帮助。

class ABRoot: 

    def index(self): 
     funds = database.FundList() 
     template = lookup.get_template("index.html") 
     return template.render(fund_list=funds) 

if __name__ == '__main__': 


    dispatcher = cherrypy.dispatch.RoutesDispatcher() 
    dispatcher.explicit = False 
    dispatcher.connect('test', '/', ABRoot().index) 

    conf = { 
    '/' : { 
     'request.dispatch' : dispatcher, 
     'tools.staticdir.root' : "C:/Path/To/Application", 
     'log.screen' : True 
    }, 
    '/css' : { 
     'tools.staticdir.debug' : True, 
     'tools.staticdir.on' : True, 
     'tools.staticdir.dir' : "css" 
    }, 
    '/js' : { 
     'tools.staticdir.debug' : True, 
     'tools.staticdir.on' : True, 
     'tools.staticdir.dir' : "js" 
    } 
    } 

    #conf = {'/' : {'request.dispatch' : dispatcher}} 

    cherrypy.tree.mount(None, "/", config=conf) 
    cherrypy.quickstart(None, config=conf) 
+1

“dispatcher.explicit = False”行的用途是什么?在试图解决升级到CherryPy 3.2的问题时,我已经看到了这个问题,但是它应用于映射器“dispatcher.mapper.explicit = False”。上面的代码似乎在没有这条线的情况下也是一样的。 – EmmEff