配置扫描未获取视图

0 投票
1 回答
544 浏览
提问于 2025-04-18 18:06

我刚接触Python和Py。我想让Pyramid的配置器扫描我的视图,但似乎有什么地方出错了,它没有找到我的“视图”index。以下是我的文件:

app.py

from wsgiref.simple_server import make_server
from pyramid.config import Configurator

if __name__ == '__main__':

    config = Configurator()
    config.add_route('home', '/')
    config.scan()

    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()

还有index.py

from pyramid.view import view_config
from pyramid.response import Response

    @view_config(route_name='home')
    def index(request):
        print'Incoming request'
        return Response('<body><h1>Home</h1></body>')

现在返回的是404错误。不过,如果我去掉config.scan(),手动添加视图的话,就能正常工作。

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from index import index

if __name__ == '__main__':

    config = Configurator()
    config.add_route('home', '/')
    config.add_view(index, route_name='home')

1 个回答

0

来自Pyramid文档

scan(package=None, categories=None, onerror=None, ignore=None, **kw)[source] 扫描一个Python包及其子包,寻找那些带有特定配置标记的对象,比如pyramid.view.view_config。找到的任何带标记的对象都会影响当前的配置状态。

这里的package参数应该是一个Python包或模块对象(或者是指向这样的包或模块的点分名称)。如果package是None,就会使用调用者的包。在这种情况下,它会在app包或app.py文件中查找标记。

要解决这个问题,可以添加

config.scan(package='index')

或者把app.py重命名为__init__.py

撰写回答