金字塔通过URL获取路由名称(String)

时间:2015-03-17 01:11:06

标签: python pyramid

我试图弄清楚是否可以通过URL(而不是请求)URL在字符串中获取路由名称,而不是字符串URL。所以假设我有一个请求,路径是/ admin / users / manage。我知道您可以匹配路由名称以获取请求的route_name但是如何获取/ admin的路由名称和/ admin / users的路由名称?

introspector.get('routes', 'admin') 

用于获取管理路由的路径路径,但是可以反过来工作吗?

introspector.get('routes', 'admin/users')

基本上有办法在admin /前缀下获取所有路由的route_objects吗? Introspector看起来像我可以遍历所有路线但不查询路径内的所有特定路线。

1 个答案:

答案 0 :(得分:1)

我不得不深入研究金字塔源代码以获得此解决方案。

此外,只是为了澄清:此解决方案将为您提供的route_name提供正确的route_url

如果我有my_route作为路由名称而/foo/bar作为网址,我将以下my_url变量设置为" / foo / bar"然后它返回" my_route"

from pyramid.interfaces import IRoutesMapper

@view_config(...)
def call_route_by_url(request):
    routes = request.registry.queryUtility(IRoutesMapper).get_routes()
    my_url = '/your/url/here'
    for r in routes:
        if r.path == my_url:
            # do something with r.name <-- that is your route_name
            pass