web-dev-qa-db-fra.com

Comment référencer un modèle html à partir d'un répertoire différent dans python flask

    @app.route('/view', methods=['GET', 'POST'])
def view_notifications():
    posts = get_notifications()
    return render_template("frontend/src/view_notifications.html", posts=posts)

Donc dans mon project/backend/src/app.py il y a ce code. Comment pourrais-je référencer le modèle qui est dans project/frontend/src/view_notifications.html J'ai essayé d'utiliser .. mais il continue de dire que le chemin n'est pas trouvé. Existe-t-il une autre façon de procéder?

[Tue Jun 23 12:56:02.597207 2015] [wsgi:error] [pid 2736:tid 140166294406912] [remote 10.0.2.2:248] TemplateNotFound: frontend/src/view_notifications.html
[Tue Jun 23 12:56:05.508462 2015] [mpm_event:notice] [pid 2734:tid 140166614526016] AH00491: caught SIGTERM, shutting down
16
BigBoy

Flask cherche dans templates/frontend/src/view_notifications.html pour votre fichier modèle. Vous devez soit déplacer votre fichier de modèles vers cet emplacement, soit modifier le dossier de modèles par défaut.

Selon les documents Flask, vous pouvez spécifier un dossier différent pour vos modèles. Par défaut, il est templates/ à la racine de votre application:

import os
from flask import Flask

template_dir = os.path.abspath('../../frontend/src')
app = Flask(__name__, template_folder=template_dir)

MISE À JOUR:

Après l'avoir testé moi-même sur une machine Windows, le dossier des modèles doit être nommé templates. Voici le code que j'ai utilisé:

import os
from flask import Flask, render_template

template_dir = os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
template_dir = os.path.join(template_dir, 'frontend')
template_dir = os.path.join(template_dir, 'templates')
# hard coded absolute path for testing purposes
working = 'C:\Python34\pro\\frontend\\templates'
print(working == template_dir)
app = Flask(__name__, template_folder=template_dir)


@app.route("/")
def hello():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)

Avec cette structure:

|-pro
  |- backend
    |- app.py
  |- frontend
    |- templates
      |- index.html

Modification d'une instance de 'templates' à 'src' et renommer le dossier des modèles en 'src' a provoqué la même erreur OP reçue.

26
kylie.a