2017-09-21 1 views
0

J'utilise Python et Flask pour créer une application web d'interaction simple. Test sur localhost: 5000 en utilisant Chrome.Fichier Javascript non trouvé en utilisant le chemin relatif pendant Flask render_template

J'ai un modèle et un fichier javascript associé situé à: ./templates/main.html ./templates/main_scripts.js

Le modèle main.html comprend les scripts fichier comme ceci:

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

Quand je rendre le modèle en utilisant ce code Python ...

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

la page main.html est rendu, mais je reçois cette erreur de la console Chrome:

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

Utilisation de la console Chrome pour inspecter l'emplacement du unfound « main_scripts.js » lorsque l'erreur se produit, le navigateur pense qu'il essaie de le charger à partir dans mon environnement virtuel à:

./env/Scripts/main_scripts.js 

... et pas du même répertoire que le modèle.

Je n'arrive pas à forcer le modèle rendu à comprendre où se trouve le fichier de script. Jusqu'à présent, j'ai essayé les chemins src comme "./main_scripts.js" et même "/appdir/main_scripts.js" avec les mêmes résultats.

+0

utilisez '', lorsque vous êtes dans un sous-itinéraire (ie: '/ user/info ') le chemin relatif sera différent. – T4rk1n

Répondre

1

Vous devez créer un floder statique au même niveau que le modèle floder et un subfloder js et les mettre js dans ce floder et l'appeler comme ça dans votre code html, voici la façon pythonique faire:

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

comme expliqué here à la documentation officielle du flacon sur la structure d'application, la structure de votre projet devrait ressembler à ceci:

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

Merci Espoir d'avoir pris le temps de répondre et de vous relier à la plus grande source de référence. J'ai cherché assez longtemps pour cette réponse mais je suppose que j'utilisais les mauvais termes. – vbsql7