Templating With Jinja2 in Flask Mise en forme de la date et de l'heure avec moment.js

Dans les première et deuxième parties de cette série de didacticiels en trois parties, nous avons vu comment structurer la structure de modèle dans une application basée sur Flask en utilisant Jinja2 de manière modulaire et comment créer des processeurs de contexte, des filtres et des macros personnalisés dans Jinja2.. 

Dans cette partie, nous verrons comment implémenter le formatage avancé de la date et de l'heure au niveau du modèle dans Jinja2 à l'aide de moment.js..

Commencer

Le formatage de la date et de l’heure est une opération pénible à gérer dans les applications Web. Les manipuler au niveau de Python, en utilisant la bibliothèque datetime, augmente la charge et est assez complexe quand il s'agit de gérer correctement les fuseaux horaires. Nous devrions normaliser les horodatages au format UTC lorsqu’ils sont stockés dans la base de données, mais ces derniers doivent ensuite être traités chaque fois qu’ils doivent être présentés aux utilisateurs du monde entier..

Il est judicieux de différer ce traitement du côté client, c'est-à-dire du navigateur. Le navigateur connaît toujours le fuseau horaire actuel de l'utilisateur et sera capable de manipuler correctement la date et l'heure. En outre, cela enlève la surcharge nécessaire de nos serveurs d'applications.

Comme toutes les bibliothèques JS, Moment.js peut être inclus dans notre application de la manière suivante. Nous devrons simplement placer le fichier JS, moment.min.js, dans le statique / js dossier. Ceci peut ensuite être utilisé dans notre fichier HTML en ajoutant l'instruction suivante avec d'autres bibliothèques JS:

L'utilisation de base de Moment.js est indiquée dans le code suivant. Cela peut être fait dans la console du navigateur pour JavaScript:

>>> moment (). calendar (); "Aujourd'hui à 21h37" >>> moment (). EndOf ('day'). FromNow (); "dans 2 heures" >>> moment (). format ('LLLL'); "Mercredi 27 janvier 2016 21:38"

Pour utiliser Moment.js dans notre application, le meilleur moyen est d’écrire un wrapper en Python et de l’utiliser via Jinja2 Variables d'environnement. Reportez-vous à ce runnable pour plus d'informations. Ajouter un fichier nommé momentjs.py au même niveau que mon_app.py.

flask_app / momentjs.py

depuis jinja2 import Markup class momentjs (objet): def __init __ (auto, horodatage): self.timestamp = horodatage # Wrapper pour appeler la méthode moment.js def render (auto, format): return Markup (""% (self.timestamp.strftime ("% Y-% m-% dT% H:% M:% S "), format)) # Format du format de l'heure (self, fmt): retour de self.render (" format (\ "% s \") "% fmt) def calendar (self): retourne self.render (" calendar () ") def fromNow (self): retourne self.render (" fromNow () ")

Ajouter la ligne suivante dans flask_app / my_app.py après app initialisation. Cela va ajouter le moment classe à Jinja Variables d'environnement.

# Définir le modèle global jinja app.jinja_env.globals ['momentjs'] = momentjs

Maintenant, moment.js peut être utilisé pour formater la date et l’heure dans les modèles comme suit:

Heure actuelle: momentjs (timestamp) .calendar ()


Heure: momentjs (horodatage) .format ('AAAA-MM-JJ HH: mm: ss')


A partir de maintenant: momentjs (timestamp) .fromNow ()

 

Conclusion

Dans cette série de didacticiels, nous avons présenté les bases de la modélisation de Jinja2 du point de vue de Flask. Nous avons commencé avec les bases de Jinja2 et appris les meilleures pratiques pour structurer la structure du modèle et tirer parti des modèles d’héritage.. 

Nous avons ensuite créé des processeurs de contexte, des filtres et des macros personnalisés, qui s'avèrent très utiles pour les modèles avancés. Le dernier tutoriel explique comment utiliser moment.js avec Jinja2 pour créer un formatage datetime extrêmement flexible et puissant..