2017-08-31 3 views
1

ich arbeite aus der Safari-Pyramide Tutorialpyramid.httpexceptions.HTTPNotFound: Die Ressource kann nicht gefunden werden

WEB-ANWENDUNGEN MIT PYTHON UND PYRAMID FRAMEWORK

Innerhalb meiner views.py Datei, die ich mit ein Problem mit dem folgenden 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 

besonders, wenn die folgende view-Funktion nennt diese Eigenschaft

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

wenn ich die Anwendung http://0.0.0.0:6543/5 leite die erwartete HTTPNotFound() nicht auslösen, siehe unten Route.

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

die Fehlerprotokolle zurück:

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. 

auf dem Browser-Kellnerin gibt Fehler einen Standardserver.

Was ist der richtige Weg, um diesen Fehler zu entfernen?


ich diese Arbeit github hochgeladen haben, aaf562e

der Prozess Tutorial Link ist here, für diejenigen, die gerne helfen, es kann zugegriffen werden mit ihren 10 Tage begehen. Dieses Problem ist von Video 17/48.

danke, wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen.

Antwort

1

In zwei Ihrer Jinja Vorlagen verweisen Sie auf die @property. Da die Eigenschaft jedoch eine HTTPNotFound() Ausnahme auslöst, landen Ihre Jinja-Vorlagen am Ende und explodieren, was zu Ihrem Problem führt.

Entweder entfernen Sie die Anrufe zu view.current von Ihrem Jinja Vorlagen oder ändern Sie IhreFunktion, so dass es nicht werfen.

Ich bin mir nicht sicher, ob dies die Lösung ist, nach der Sie suchen, aber sie weicht nicht vom Tutorial ab.

2

Dies ist eine andere HTTPNotFound Ausnahme und es wird bei der Route-Matching-Schritt ausgelöst, bevor Ihre Ansicht sogar ausgeführt wird. Der Grund ist, dass Sie config.add_route('view', '/{id}') haben. Beachten Sie die /{id}NICHT/{id}/. Die Pyramide berücksichtigt diese zwei verschiedenen Routen und somit stimmt die letztere nicht überein. Die einfachste Lösung hierfür ist, alle unsere kanonischen Routen mit einem / Suffix wie /{id}/ zu registrieren und dann append_slash=True an Ihre nicht gefundene Ansicht Konfiguration wie config.add_notfound_view(..., append_slash=True) oder @notfound_view_config(append_slash=True) zu übergeben. Dies wird eine Umleitung auslösen, wenn ein Benutzer die Version ohne den abschließenden Schrägstrich besucht.

+0

danke für die Antwort. Leider löst dies nicht das Hauptproblem, das ich habe. Ich habe mehr von meinem Fehlerprotokoll hinzugefügt, damit Sie sehen können, woher das Problem kommt. Ich entschuldige mich, dass ich das nicht früher getan habe. Das Problem, glaube ich, ist die Zeile ** Raise HTTPNotFound() ** heißt –

Verwandte Themen