Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在cherrypy中获取对象的url?_Url_Reverse_Cherrypy_Dispatcher - Fatal编程技术网

如何在cherrypy中获取对象的url?

如何在cherrypy中获取对象的url?,url,reverse,cherrypy,dispatcher,Url,Reverse,Cherrypy,Dispatcher,我对CherryPy是新手。我使用的是默认的dispatcher,URL结构类似于: root = Root() root.page1 = Page1() root.page1.apple = Apple() root.page2 = Page2() root.page2.orange = Orange() Orange呈现一个模板,我需要一个指向Apple的链接。我可以硬编码/page1/apple/。但是我怎样才能干净利落地获取苹果的URL呢 这可以通过CherryPy中的默认dispat

我对CherryPy是新手。我使用的是默认的dispatcher,URL结构类似于:

root = Root()
root.page1 = Page1()
root.page1.apple = Apple()
root.page2 = Page2()
root.page2.orange = Orange()
Orange
呈现一个模板,我需要一个指向
Apple
的链接。我可以硬编码
/page1/apple/
。但是我怎样才能干净利落地获取苹果的URL呢

这可以通过CherryPy中的默认dispatcher实现,还是仅通过Routes dispatcher实现


(我来自Django世界,人们可以在那里使用它。)

您可以通过

cherrypy.tree.apps[mount_point].root
root
始终是装载点的装载实例。因此,反向函数看起来像:

def reverse(cls):
    # get link to a class type
    for app_url in cherrypy.tree.apps.keys():
        if isinstance(cherrypy.tree.apps[app_url].root, cls):
            # NOTE: it will return with the first mount point of this class
            return app_url
请在下面找到使用您的类的示例代码<代码>http://localhost:8080/page4/orange/打印出
{Orange和苹果的链接:“/page3/apple”}

import cherrypy

link_to_apple_global = ''

class Orange(object):
    def __init__(self):
        pass
    @cherrypy.expose
    @cherrypy.tools.json_out()
    def index(self):
        return {"Orange and the link to apple: ": link_to_apple_global}
class Page2(object):

    def __init__(self):
        pass
    @cherrypy.expose
    def index(self):
        return "Page2"
class Apple(object):

    def __init__(self):
        pass
    @cherrypy.expose
    def index(self):
        return "Apple"

class Page1(object):

    def __init__(self):
        pass
    @cherrypy.expose
    def index(self):
        return "Page1"

class Root(object):

    def __init__(self):
        pass
    @cherrypy.expose
    def index(self):
        return "Root"            

def reverse(cls):
    #return cherrypy.tree.apps.keys()
    #return dir(cherrypy.tree.apps[''].root)
    #return dir(cherrypy.tree.apps['/page3/apple'].root)
    # get link to apple
    for app_url in cherrypy.tree.apps.keys():
        if isinstance(cherrypy.tree.apps[app_url].root, cls):
            # NOTE: it will return with the first instance
            return app_url

root = Root()
root.page1 = Page1()
root.page1.apple = Apple()
root.page2 = Page2()
root.page2.orange = Orange()

cherrypy.tree.mount(root, '/')
# if you do not specify the mount points you can find the objects
# in cherrypy.tree.apps[''].root...
cherrypy.tree.mount(root.page1, '/page4')
cherrypy.tree.mount(root.page2, '/page3')
cherrypy.tree.mount(root.page2.orange, '/page4/orange')
cherrypy.tree.mount(root.page1.apple, '/page3/apple')

link_to_apple_global = reverse(Apple)

cherrypy.engine.start()
cherrypy.engine.block()