具有未知应用程序装载路径的Cherrypy URL

时间:2016-12-26 19:28:32

标签: python-2.7 url-routing cherrypy

我有一个由用户托管的CherryPy webapp。通常,主应用程序安装如下:

cherrypy.tree.mount(root,
                    '/',
                    root.conf
                    )

但是,为了让它在nginx之类的反向代理之后工作,它需要能够安装在其他地方,用户选择的任何路径:

mount = '/my_application'
cherrypy.tree.mount(root,
                    mount,
                    root.conf
                    )

mount可以是用户选择的任何内容。

现在的问题是链接破了。

raise cherrypy.HTTPRedirect("/news")

不再有效。当我需要重定向到地址时,它会重定向到地址:端口/新闻:port / my_application / news。

我可以通过为每个应用程序路径前缀的url创建一个条件:

if mount != '/':
    url = mount + '/news'
raise cherrypy.HTTPRedirect(url)

但必须有更好的方法来做到这一点。我已经查看了Request Dispatching,但我无法动态地重新编写URL。

处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用辅助函数cherrypy.url生成相对于script_name/my_application)的网址。

你最终会得到类似的东西:

raise cherrypy.HTTPRedirect(cherrypy.url('/news'))

cherrypy.url来源的链接:https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_helper.py#L194