pyramid.httpexceptions.HTTPNotFound: 找不到资源
pyramid.httpexceptions.HTTPNotFound: The resource could not be found
我正在研究 Safari 的金字塔教程
WEB APPLICATIONS WITH PYTHON AND THE PYRAMID FRAMEWORK
在我的 views.py
文件中,我遇到以下代码问题:
@property
def current(self):
todo_id = self.request.matchdict.get('id')
todo = sample_todos.get(todo_id)
if not todo:
raise HTTPNotFound()
return todo
特别是当下面的视图函数调用这个时属性
@view_config(route_name='view', renderer='templates/view.jinja2')
def view(self):
return dict(todo=self.current)
当我 运行 时,应用程序 http://0.0.0.0:6543/5
不会触发预期的 HTTPNotFound()
,请参阅下面的路线。
config.add_route('view', '/{id}')
错误日志 return:
File "/Users/alex/zdev/t-oreilly/mysite/views.py", line 50, in view
return dict(todo=self.current)
File "/Users/alex/zdev/t-oreilly/mysite/views.py", line 25, in current
raise HTTPNotFound()
pyramid.httpexceptions.HTTPNotFound: The resource could not be found.
浏览器女服务员return默认服务器错误。
消除此错误的正确方法是什么?
我已将此作品上传至 github,提交 aaf562e
教程 link 是 here,对于那些渴望提供帮助的人,可以通过他们的 10 天试用版访问它。此问题来自视频 17/48.
谢谢,如果您需要更多信息,请告诉我。
这是一个不同的 HTTPNotFound
异常,它在您的视图执行之前的路由匹配步骤中引发。原因是你有config.add_route('view', '/{id}')
。请注意 /{id}
不是 /{id}/
。 Pyramid 考虑了这两条不同的路线,因此后者不匹配。最简单的解决方案是使用 /
后缀注册我们所有的规范路由,例如 /{id}/
,然后将 append_slash=True
传递给未找到的视图配置,例如 config.add_notfound_view(..., append_slash=True)
或 @notfound_view_config(append_slash=True)
。当用户访问没有尾部斜杠的版本时,这将触发重定向。
在您的两个 Jinja 模板中,您引用了 @property
view.current
。但是,由于 属性 抛出 HTTPNotFound()
异常,您的 Jinja 模板最终会触发并爆炸,从而导致您的问题。
要么从您的 Jinja 模板中删除对 view.current
的调用,要么修改您的 view.current
函数,使其不会抛出异常。
我不确定这是否是您正在寻找的解决方案,但它没有偏离教程。
我正在研究 Safari 的金字塔教程
WEB APPLICATIONS WITH PYTHON AND THE PYRAMID FRAMEWORK
在我的 views.py
文件中,我遇到以下代码问题:
@property
def current(self):
todo_id = self.request.matchdict.get('id')
todo = sample_todos.get(todo_id)
if not todo:
raise HTTPNotFound()
return todo
特别是当下面的视图函数调用这个时属性
@view_config(route_name='view', renderer='templates/view.jinja2')
def view(self):
return dict(todo=self.current)
当我 运行 时,应用程序 http://0.0.0.0:6543/5
不会触发预期的 HTTPNotFound()
,请参阅下面的路线。
config.add_route('view', '/{id}')
错误日志 return:
File "/Users/alex/zdev/t-oreilly/mysite/views.py", line 50, in view
return dict(todo=self.current)
File "/Users/alex/zdev/t-oreilly/mysite/views.py", line 25, in current
raise HTTPNotFound()
pyramid.httpexceptions.HTTPNotFound: The resource could not be found.
浏览器女服务员return默认服务器错误。
消除此错误的正确方法是什么?
我已将此作品上传至 github,提交 aaf562e
教程 link 是 here,对于那些渴望提供帮助的人,可以通过他们的 10 天试用版访问它。此问题来自视频 17/48.
谢谢,如果您需要更多信息,请告诉我。
这是一个不同的 HTTPNotFound
异常,它在您的视图执行之前的路由匹配步骤中引发。原因是你有config.add_route('view', '/{id}')
。请注意 /{id}
不是 /{id}/
。 Pyramid 考虑了这两条不同的路线,因此后者不匹配。最简单的解决方案是使用 /
后缀注册我们所有的规范路由,例如 /{id}/
,然后将 append_slash=True
传递给未找到的视图配置,例如 config.add_notfound_view(..., append_slash=True)
或 @notfound_view_config(append_slash=True)
。当用户访问没有尾部斜杠的版本时,这将触发重定向。
在您的两个 Jinja 模板中,您引用了 @property
view.current
。但是,由于 属性 抛出 HTTPNotFound()
异常,您的 Jinja 模板最终会触发并爆炸,从而导致您的问题。
要么从您的 Jinja 模板中删除对 view.current
的调用,要么修改您的 view.current
函数,使其不会抛出异常。
我不确定这是否是您正在寻找的解决方案,但它没有偏离教程。