You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyramid同一路由多上下文视图注册异常问题问询

问题原因与解决方案

你遇到的这个情况其实是Pyramid的proutes工具默认行为导致的,并不是你的操作有误。

为什么proutes显示<unknown>?

当你给add_view指定了context参数时,这个视图就变成了上下文绑定的视图——它只会在路由工厂返回的上下文对象(也就是你的Dummy实例)与context参数匹配时才会被触发。而proutes的默认输出只会展示那些没有绑定特定上下文、直接通过route_name匹配的视图,所以它没法识别到你绑定了Dummy上下文的这个视图,就显示成了<unknown>。

但这并不代表你的视图没有被正确注册,它其实已经在Pyramid的视图注册表中了,只是proutes默认不展示这类上下文敏感的视图而已。

如何验证视图是否生效?

你可以修改一下view函数,让它返回一个响应,然后启动应用访问/dummy/route:

def view(request):
    return "Hello from Dummy context view!"

当你访问这个路径时,路由工厂dummy_factory会返回Dummy实例,Pyramid会匹配到绑定了Dummy上下文的视图,你应该能看到返回的内容,这就证明视图是正常工作的。

如何让proutes显示所有视图?

如果想让proutes展示包括上下文绑定的所有视图,只需要加上--show-all参数:

$ env/bin/proutes --show-all development.ini

这样输出里就会列出关联到Dummy上下文的视图信息了。

关于多上下文视图的配置

你在实际项目中给同一路由配置多个不同上下文的视图是完全可行的,只要每个视图的context参数对应不同的类,并且路由工厂能根据请求返回对应的上下文实例,Pyramid就会自动匹配到对应的视图。比如你可以再加一个AnotherDummy类和对应的视图:

class AnotherDummy:
    pass

def another_dummy_factory(request):
    # 这里可以根据请求参数等逻辑返回不同的上下文实例
    if request.GET.get('type') == 'another':
        return AnotherDummy()
    return Dummy()

def another_view(request):
    return "Hello from AnotherDummy context view!"

# 然后注册视图
config.add_view(another_view, route_name="dummy.route", context=AnotherDummy)

这样根据请求的不同,Pyramid会匹配到对应的视图,完全没问题。

内容的提问来源于stack exchange,提问作者drnextgis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:47:55