金字塔网络框架中可能出现的奇怪错误
possible weird bug in pyramid web framework
我正在按照 link 中给出的金字塔网络框架教程步骤进行操作:
https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/cookiecutters.html
设置好后访问http://localhost:6543/
一切都按预期进行,路线名称中的项目名称“Pyramid scaffold”正确显示。
然后我添加了第二个视图函数,并将其添加到路由中。但随后主路线开始显示 404。
第二条路线有效,但第一条路线和视图停止工作并在浏览器中加载时给出 404。
我找不到问题所在。添加了几个函数和路由后,我找不到问题所在。
我认为这是提供的 cookiecutter 或金字塔框架本身的一些问题。
这在金字塔版本低于 2 的情况下从未发生过。还尝试添加不同的视图和路线。只有一条路线似乎有效,所有其他路线 return 404 异常。
除此处列出的文件外,未删除或编辑任何文件。
有人可以帮我解决这个问题吗?
文件的原始内容
# File location 'views/default.py"
from pyramid.view import view_config
@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'Pyramid Scaffold'}
和
# File location 'routes.py"
def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
经过我的修改
# File location 'views/default.py"
from pyramid.view import view_config
@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'Pyramid Scaffold'}
@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'this works'}
和
# File location 'routes.py"
def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
config.add_route('second', '/second')
终端登录错误:
2021-10-01 02:41:29,880 INFO [pyramid_debugtoolbar:287][waitress-0] Squashed pyramid.httpexceptions.HTTPNotFound at http://localhost:6543/
traceback url: http://localhost:6543/_debug_toolbar/313430323330373531313831343038/exception
访问回溯 URL 时,除了说
外没有任何有用的信息
env/lib/python3.8/site-packages/pyramid/router.py", line 169, in handle_request
raise HTTPNotFound(msg)
错误几乎总是出现在开发人员的代码中,很少出现在像 Pyramid 这样的成熟包中。
在您的例子中,您定义了两个具有相同名称的方法,并用第二个覆盖了第一个。因此删除了第一条路线 home
的视图。
要补救这种情况,请为第二个视图函数指定一个唯一的名称。
@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_second_view(request):
return {'project': 'this works'}
我正在按照 link 中给出的金字塔网络框架教程步骤进行操作: https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/cookiecutters.html
设置好后访问http://localhost:6543/ 一切都按预期进行,路线名称中的项目名称“Pyramid scaffold”正确显示。
然后我添加了第二个视图函数,并将其添加到路由中。但随后主路线开始显示 404。 第二条路线有效,但第一条路线和视图停止工作并在浏览器中加载时给出 404。
我找不到问题所在。添加了几个函数和路由后,我找不到问题所在。 我认为这是提供的 cookiecutter 或金字塔框架本身的一些问题。 这在金字塔版本低于 2 的情况下从未发生过。还尝试添加不同的视图和路线。只有一条路线似乎有效,所有其他路线 return 404 异常。
除此处列出的文件外,未删除或编辑任何文件。
有人可以帮我解决这个问题吗?
文件的原始内容
# File location 'views/default.py"
from pyramid.view import view_config
@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'Pyramid Scaffold'}
和
# File location 'routes.py"
def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
经过我的修改
# File location 'views/default.py"
from pyramid.view import view_config
@view_config(route_name='home', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'Pyramid Scaffold'}
@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_view(request):
return {'project': 'this works'}
和
# File location 'routes.py"
def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
config.add_route('second', '/second')
终端登录错误:
2021-10-01 02:41:29,880 INFO [pyramid_debugtoolbar:287][waitress-0] Squashed pyramid.httpexceptions.HTTPNotFound at http://localhost:6543/
traceback url: http://localhost:6543/_debug_toolbar/313430323330373531313831343038/exception
访问回溯 URL 时,除了说
外没有任何有用的信息env/lib/python3.8/site-packages/pyramid/router.py", line 169, in handle_request
raise HTTPNotFound(msg)
错误几乎总是出现在开发人员的代码中,很少出现在像 Pyramid 这样的成熟包中。
在您的例子中,您定义了两个具有相同名称的方法,并用第二个覆盖了第一个。因此删除了第一条路线 home
的视图。
要补救这种情况,请为第二个视图函数指定一个唯一的名称。
@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_second_view(request):
return {'project': 'this works'}