2017-09-21 2 views
0

Ich benutze Python und Flask, um eine einfache Interaktion Web-App zu bauen. Testen auf localhost: 5000 mit Chrome.Javascript-Datei nicht gefunden mit relativen Pfad während Flask render_template

Ich habe eine Vorlage und eine zugehörige JavaScript-Datei befindet sich unter: ./templates/main.html ./templates/main_scripts.js

Die main.html Vorlage enthält die Skripte wie diese Datei:

<script src="main_scripts.js"></script> 

Wenn ich die Vorlage mit diesem Python-Code machen ...

return render_template('main.html', session_id=session_id, title=sess.title) 

die main.html Seite ist gemacht, aber ich habe diesen Fehler in der Chrome-Konsole:

Failed to load resource: the server responded with a status of 404 (NOT FOUND) 

die Chrome-Konsole Mit dem Standort des unfound ‚main_scripts.js‘ zu inspizieren, wenn der Fehler auftritt, denkt der Browser zu laden versucht, von in meiner virtuellen Umgebung an:

./env/Scripts/main_scripts.js 

... und nicht aus dem gleichen Verzeichnis wie die Vorlage.

Ich kann nicht scheinen, die gerenderte Vorlage zu zwingen, zu verstehen, wo es Skriptakte ist. Bis jetzt habe ich src Pfade wie "./main_scripts.js" und sogar "/appdir/main_scripts.js" mit genau den gleichen Ergebnissen versucht.

+0

Verwendung '', wenn Sie sich in einer Unterroute befinden (zB: '/ user/info ') der relative Pfad wird anders sein. – T4rk1n

Antwort

1

Sie benötigen einen statischen floder auf dem gleichen Niveau wie die Vorlage floder und eine js subfloder und setzten die js in diesem floder zu erstellen und es so in Ihrem HTML nennt, hier ist die pythonic Weise tut es:

<script src="{{ url_for('static', filename="js/main_scripts.js")}}"></script> 

als here in der offiziellen Dokumentation der Kolben über Anwendungsstruktur erläutert, sollten Sie Ihre Projektstruktur so aussehen:

/yourapplication 
    yourapplication.py 
    /static 
     /css 
      style.css 
     /js 
      main_scripts.js 
    /templates 
     main.html 
     ... 
+0

Vielen Dank, Espoir, dass Sie sich die Zeit genommen haben, sowohl zu antworten als auch auf die größere Referenzquelle zu verlinken. Ich habe eine ganze Weile nach dieser Antwort gesucht, aber ich denke, ich habe die falschen Begriffe benutzt. – vbsql7

Verwandte Themen