2016-03-19 5 views
0

Ich versuche, eine Standardfehlerseite vorzubereiten. In error.html Datei verwende ich:Tornado statisches Datei-Routing

<link href="css/bootstrap.min.css" rel="stylesheet"> 

In Tornado Application Ich verwende folgende Routing-Anweisung:

(r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'} 

Sagen wir, ich http://localhost:8888/api URL-Typ. Alles ist in Ordnung und CSS-Datei wird korrekt geladen und Fehlerseite wird gut gerendert. Wenn ich jedoch http://localhost:8888/api/foo eingeben, wird die CSS-Datei nicht gefunden. In der ersten Situation wird die CSS-Anfrage http://localhost:8888/css/bootstrap.min.css vom Handler korrekt behandelt. Bei dem zweiten Ansatz wird die Anfrage für css in http://localhost:8888/api/css/bootstrap.min.css übersetzt, was nicht behandelt wird.

Ich möchte, dass die Ressourcen in beiden Situationen gefunden werden, um die Fehlerseite korrekt anzuzeigen. Ich kann verwenden:

(r'.*/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'} 

diesmal jedoch kann ich geben Sie in den Browser http://localhost:8888/api/asdasdsadsad/css/bootstrap.min.css URL und die CSS-Datei dispayed ist, während ich dort denken sollte Fehlerseite angezeigt. Wie kann ich dieses Problem lösen?

Antwort

0

Es ist, weil Sie relative Pfade verwenden. Es gibt zwei gängige Möglichkeiten, dies zu beheben:

  1. Verwenden Sie absolute URLs. In / (Schrägstrich), bevor eine Ressource, so dass anstelle von <link href="css/bootstrap.min.css" rel="stylesheet"> Verwendung <link href="/css/bootstrap.min.css" rel="stylesheet">

  2. hinzufügen <base> Seite in <head> Abschnitt

    Basis ... gibt die Basis-URL für alle relativen URLs innerhalb eines enthaltenen zu verwenden Dokument.

    <base href="http://www.example.com/">

Und lassen Sie arbeitet der Handler als

(r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'}) 

letzteres, weil es regex ist sehr breit ist, wie man es behandelt Anfrage feststellen, dass 404 sein sollte. Die bewährte Methode besteht darin, Routen so spezifisch wie möglich zu gestalten.

+0

Ich habe versucht Ihre erste Lösung vor und es hat nicht funktioniert, aber es tut jetzt. Danke für Hilfe und zweites Beispiel, was für mich etwas Neues war. –