金字塔网络框架中可能存在的奇怪错误
Posted
技术标签:
【中文标题】金字塔网络框架中可能存在的奇怪错误【英文标题】:possible weird bug in pyramid web framework 【发布时间】:2021-11-22 16:41:22 【问题描述】:我正在关注链接中给出的金字塔网络框架教程步骤: https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/cookiecutters.html
设置好后访问 http://localhost:6543/ 一切正常,路线名称中的项目名称“金字塔脚手架”正确显示。
然后我添加了第二个视图函数并将其添加到路线中。但随后家乡路线开始显示 404。 第二条路线有效,但第一条路线和视图停止工作并在浏览器中加载时给出 404。
我找不到问题所在。添加几个功能和路线后,我无法找到问题。 我认为这是提供的 cookiecutter 或金字塔框架本身的一些问题。 这在金字塔版本小于 2 的情况下从未发生过。还尝试添加不同的视图和路线。似乎只有一条路线有效,所有其他路线都返回 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)
【问题讨论】:
【参考方案1】:Bug 几乎总是在开发人员的代码中,很少出现在 Pyramid 等成熟的包中。
在你的例子中,你定义了两个同名的方法,用第二个覆盖第一个。因此删除了第一条路线home
的视图。
为了纠正这种情况,给第二个视图函数一个唯一的名字。
@view_config(route_name='second', renderer='pyramid_scaffold:templates/mytemplate.jinja2')
def my_second_view(request):
return 'project': 'this works'
【讨论】:
昨晚深夜,我的大脑并没有像我希望的那样运作。从 svelte js 前端代码切换后,在 python 中也犯了类似的错误。我现在好尴尬。我看到您是金字塔网络框架以及许多其他项目的核心贡献者。感谢您付出的努力。 “昨晚深夜,我的大脑并没有像我希望的那样运作。”我知道那种感觉;)以上是关于金字塔网络框架中可能存在的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章