Pyramid框架根路径无法路由至视图?如何配置根路径路由?
Pyramid框架根路径路由问题解答
1. 为什么根路径没有路由到你的视图?
你当前的代码里,虽然定义了@view_config(name='')的视图函数,但Pyramid根本没发现这个视图的存在!原因很简单:你的Configurator实例没有执行扫描操作,它不知道你写了这个视图函数,自然不会把根路径(/)和这个视图绑定起来。
另外,@view_config(name='')本身是用来匹配空名称的路由,但如果没有先让框架加载这个视图所在的模块,这个装饰器的配置根本不会生效。
2. 如何将根路径路由到视图?
有两种常用的方法可以解决这个问题,我都给你列出来:
方法一:让Configurator扫描当前模块
在创建app之前,调用config.scan(),它会自动发现当前模块里所有用@view_config装饰的视图函数。修改后的代码如下:
import sys import wsgiref.simple_server from pyramid.config import Configurator from pyramid.response import Response from pyramid.view import view_config @view_config(name='') def page(request): return Response("这是根路径的视图内容!") def main(argv): # Create Application. with Configurator() as config: # 扫描当前模块,加载所有@view_config装饰的视图 config.scan() app = config.make_wsgi_app() # Serve HTTP requests. server = wsgiref.simple_server.make_server('localhost', 8080, app) server.serve_forever() return 0 if __name__ == '__main__': sys.exit(main(sys.argv))
注意:要把视图函数放在
main函数之前,这样扫描的时候才能找到它;或者你也可以指定扫描的模块路径,比如config.scan(__name__),效果是一样的。
方法二:显式添加路由并绑定视图
如果你不想用自动扫描,也可以手动添加路由,然后把视图和这个路由绑定。代码示例:
import sys import wsgiref.simple_server from pyramid.config import Configurator from pyramid.response import Response from pyramid.view import view_config def page(request): return Response("这是根路径的视图内容!") def main(argv): # Create Application. with Configurator() as config: # 添加根路径路由,名称设为'root' config.add_route('root', '/') # 将视图函数和这个路由绑定 config.add_view(page, route_name='root') app = config.make_wsgi_app() # Serve HTTP requests. server = wsgiref.simple_server.make_server('localhost', 8080, app) server.serve_forever() return 0 if __name__ == '__main__': sys.exit(main(sys.argv))
这种方式更直观,适合你需要精准控制路由的场景。
内容的提问来源于stack exchange,提问作者ohmu
相关产品推荐
相关产品推荐

