Search code examples
pythonexceptionpyramid

pyramid.httpexceptions.HTTPNotFound: The resource could not be found


I am working off of Safari's Pyramid tutorial

WEB APPLICATIONS WITH PYTHON AND THE PYRAMID FRAMEWORK

Inside of my views.py file I having a problem with the following code:

@property
def current(self):
    todo_id = self.request.matchdict.get('id')
    todo = sample_todos.get(todo_id)
    if not todo:
        raise HTTPNotFound()
    return todo

particularly when the following view function calls this property

@view_config(route_name='view', renderer='templates/view.jinja2')
def view(self):
    return dict(todo=self.current)

when I am running the application http://0.0.0.0:6543/5 will not trigger the anticipated HTTPNotFound(), see route below.

config.add_route('view', '/{id}')

the error logs 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.

On the browser waitress returns a default server error.

What is the proper way to remove this error?


I have uploaded this work to github, commit aaf562e

the tutorial link is here, for those eager to help, it can be accessed with their 10 day trial. This problem is from video 17/48.

thank you, if you need additional information please let me know.


Solution

  • In two of your Jinja templates you reference the @property view.current. However, since the property throws an HTTPNotFound() exception, your Jinja templates end up hitting that and explode, causing your problem.

    Either remove the calls to view.current from your Jinja templates or modify your view.current function so that it doesn't throw.

    I'm not sure if this is the solution you are looking for, but it doesn't deviate from the tutorial.