Comment faire pour importer personnalisé jinja2 des filtres à partir d'un autre fichier (et à l'aide de Flacon)?
J'ai un jinja_filters.py fichier avec quelques dizaines de filtres personnalisés que j'ai écrit. Maintenant, j'ai plusieurs Flacon applications qui ont besoin de l'utilisation de ces filtres. (Je ne sais pas si mon problème est de Flacon spécifique ou pas.)
Un hacky façon d'accomplir ce que je veux, c'est faire:
app = Flask(__name__)
import jinja_filters
@app.template_filter('filter_name1')
def filter_name1(arg):
return jinja_filters.filter_name1(arg)
@app.template_filter('filter_name2')
def filter_name2(arg):
return jinja_filters.filter_name2(arg)
...
Quelle est la "bonne" façon de faire cela?
EDIT: dans l'idéal, je n'aurais pas à la liste de chaque nom de filtre. Alors quand j'ai ajouter un nouveau filtre à jinja_filters.py je n'ai pas à mettre à jour tout autre code, toutes mes applications serait en mesure de l'utiliser immédiatement.
Vous devez vous connecter pour publier un commentaire.
Où jamais vous êtes en train de configurer votre application objet (app.py, peut-être), il vous suffit d'importer vos filtres personnalisés et ensuite modifier le Jinja environnement attribut.
et ainsi de suite.
Une autre possibilité est d'utiliser le
inspect
module de trouver toutes les méthodes dansjinja_filters
comme suit:Que le code n'est pas testé, mais l'idée est de construire un dictionnaire des noms de fonction et de fonctions qui existent dans votre
jinja_filters
fichiers et ensuite mettre à jour le Jinja environnement de filtres dictionnaire avec vos filtres.inspect
module.Il est recommandé de le faire à l'aide de Flacon de plans. L'un de ses cas d'utilisation de cette fonctionnalité est spécifiquement:
Vous suffit de créer un
fiole.Plan
de l'objet et de l'utiliser pour enregistrer vos filtres de manière similaire, comme vous le feriez avecflask.Flask
objet d'application, à l'aide de laPlan d'action.app_template_filter
décorateur ouPlan d'action.add_app_template_filter
méthode.Ensuite, il suffit de vous inscrire le plan d'action sur votre application objet:
Et voilà, les filtres sont enregistrés.