1

我正在研究面包屑生成器。它使用 request.path,然后为每个子路径构建一个面包屑。

例子:

/blog/articles/view/12345

然后对于每个子路径:

/blog/articles/view
/blog/articles
/blog

如果此 URL 后面有可调用的视图(允许不带参数的 GET 方法),则返回 True,否则返回 False

这样我就可以使面包屑中的子路径可点击,以显示那里提供了一些东西。

任何不会调用任何子路径并生成无用代码执行的想法?

4

1 回答 1

1

不,您必须测试所有路径前缀;路由允许许多任意 URL 成为可能。此外,在混合使用路径谓词的情况下,多个路由可以匹配同一个 URL,并且在它们之间进行选择取决于请求中的其他信息。

要准备面包屑,请在子路径上循环一次,并确定每个子路径是否有匹配的视图;最简单的方法是重用pviews命令底层的代码;此代码需要当前请求:

from pyramid.scripts.pviews import PViewsCommand

pvcomm = PViewsCommand()

urlpath = request.environ['PATH_INFO']
parts = urlpath.split('/')
existing_views = {}

for i in range(1, len(parts)):
    path = '/'.join(parts[:i])
    view = pvcomm._find_view(path, request.registry)
    if view is not None:
        existing_views[path] = view

existing_views您现在可以在字典中查找路径前缀。

于 2013-01-28T20:53:23.437 回答