Pyramid:如何在视图中获取所有应用的路由?

6 投票
3 回答
4241 浏览
提问于 2025-04-17 16:13

我想查看我应用程序中的所有路由,并把它们以键值对的形式返回。

'route1' => '{foo:\w+}'
'route2' => '{baz:\w+\d+}'
... and so on

但是我不知道怎么在我的视图中获取这些路由。例如,这是我的视图。我想让它返回一个路由的映射。我这样做:

@view_config(route_name='route1')
def someView(request):
    routes = request.registry.settings.getRoutes()  ## what should I print here to get a map of routes?
    r = ''
    for k,v in sorted(routes.items()):
        r += str(k) + "=>" + str(v) + "<br/>";
    return Response(r)

有一个叫做 RoutesConfiguratorMixin 的类,它里面有一个 get_routes_mapper 方法。我试着导入这个类并调用它的方法,但出现了一个错误,提示它的实例中没有 registry

from pyramid.config.routes import RoutesConfiguratorMixin as Router

r = Router();
routes = r.get_routes_mapper();
## ... and the same code as above

这样不行。

3 个回答

1

首先安装pshell,然后用你的应用配置登录到pshell。接着运行下面的代码:

print("\n".join([r.path for r in app.routes_mapper.routelist]))
5

Pyramid 安装了一个叫做 proutes 的脚本,用来实现这个功能。

10

这里有两种方法,一种是官方支持的(公共),另一种是非官方支持的(私有)。

第一种方法是使用“内省器”,具体的说明可以在这里找到。

第二种方法是使用路由映射器(这不是一个公共接口),就像“pyramid debugtoolbar”在它的路由面板中所做的那样。

撰写回答