Pyramid:单独文件定义的视图未关联路由

1 投票
2 回答
551 浏览
提问于 2025-04-18 09:17

在我的 __init__.py 文件里,我有以下内容:

config = Configurator(settings=settings)

config.include('pyramid_jinja2')
config.include('pathshala.routes.all_routes')

config.add_static_view('static', 'static', cache_max_age=3600)

config.scan()

我在 routes.py 文件里定义了所有的路由,内容如下:

def all_routes(config):
    config.add_route('sis_add_student', '/sis/add')

所有的视图都在 views.py 文件里定义(和上面的文件在同一个包里),内容如下:

@view_config(route_name='sis_add_student')
def add_student_view(request):
    return Response("Hey there!")

但是,当我尝试打开路径 /sis/add 时,出现了404错误。调试工具栏提示说找到了正确的路由,但没有和这个路由关联的视图。

有趣的是,如果我把视图的定义移动到 __init__.py 文件里,它就能正常工作了。

我到底哪里做错了呢?我觉得可能是我的 config.scan() 出了问题,因为它在视图声明在其他文件时无法关联视图,但我不太确定,也不知道该怎么解决。

2 个回答

0

如果你不想用复杂的方法,可以试试这样做:

from .routes import add_routes

config = Configurator(settings=settings)    
config.include('pyramid_jinja2')

add_routes(config)

config.add_static_view('static', 'static', cache_max_age=3600)

config.scan()

在我的应用里,我是这样做的,因为我当时不知道有 config.include() 这个方法,不过这样也能正常工作 :)

0

看起来在你的项目里不能有一个叫做 views 的包。我之前把 views 定义成了一个包。后来我通过删除 __init__.py 文件来去掉这个包,问题就解决了。

撰写回答