web-dev-qa-db-fra.com

Flask + Jinja: passer des données à un modèle de base / tous les modèles

J'ai une méthode qui renvoie les données qui sont nécessaires dans mon modèle de base (contenu pour un pied de page global).

Comment (1) passer une variable dans le modèle de base (que d'autres modèles étendent) ou (2) passer une variable à tous les modèles globalement sans l'ajouter explicitement dans un appel à render_template?

39
okoboko

De flask docs: Processeurs de contexte de Flask

Pour injecter automatiquement de nouvelles variables dans le contexte d'un modèle, des processeurs de contexte existent dans Flask. Les processeurs de contexte s'exécutent avant le rendu du modèle et ont la possibilité d'injecter de nouvelles valeurs dans le contexte du modèle. Un processeur de contexte est une fonction qui renvoie un dictionnaire. Les clés et les valeurs de ce dictionnaire sont ensuite fusionnées avec le contexte du modèle, pour tous les modèles de l'application:

Exemple de documents:

@app.context_processor
def inject_user():
    return dict(user=g.user)

Notez que cet exemple utilise la variable g, qui est déjà accessible dans les modèles.

50
Gohn67