Schablonieren mit Jinja2 in Flask Datums- und Uhrzeitformatierung mit moment.js

Im ersten und zweiten Teil dieser dreiteiligen Lernprogrammreihe haben wir gesehen, wie Sie die Vorlagenstruktur in einer flaschenbasierten Anwendung mit Jinja2 modular gestalten und in Jinja2 benutzerdefinierte Kontextprozessoren, Filter und Makros erstellen. 

In diesem Teil erfahren Sie, wie Sie die erweiterte Datums- und Zeitformatierung auf Vorlagenebene in Jinja2 mithilfe von moment.js implementieren.

Fertig machen

Die Formatierung von Datum und Uhrzeit ist in Webanwendungen eine schwierige Angelegenheit. Der Umgang mit ihnen auf der Ebene von Python mithilfe der datetime-Bibliothek erhöht den Aufwand und ist recht komplex, wenn es um die korrekte Handhabung von Zeitzonen geht. Wir sollten die Zeitstempel auf UTC standardisieren, wenn sie in der Datenbank gespeichert sind. Die Zeitstempel müssen jedoch jedes Mal verarbeitet werden, wenn sie den Benutzern weltweit zur Verfügung gestellt werden müssen.

Es ist eine kluge Sache, diese Verarbeitung auf die Client-Seite, dh den Browser, zu verschieben. Der Browser kennt immer die aktuelle Zeitzone des Benutzers und kann Datum und Uhrzeit korrekt bearbeiten. Dies entlastet auch unsere Anwendungsserver.

Wie jede JS-Bibliothek kann Moment.js auf folgende Weise in unsere App aufgenommen werden. Wir müssen nur die JS-Datei platzieren, moment.min.js, in dem statisch / js Mappe. Dies kann dann in unserer HTML-Datei verwendet werden, indem die folgende Anweisung zusammen mit anderen JS-Bibliotheken hinzugefügt wird:

Die grundlegende Verwendung von Moment.js wird im folgenden Code gezeigt. Dies kann in der Browserkonsole für JavaScript erfolgen:

>>> Moment (). Kalender (); "Heute um 21:37 Uhr" >>> moment (). EndOf ('day'). FromNow (); "in 2 Stunden" >>> Moment (). Format ('LLLL'); "Mittwoch, 27. Januar 2016 21:38"

Um Moment.js in unserer Anwendung zu verwenden, ist es am besten, einen Wrapper in Python zu schreiben und ihn über zu verwenden jinja2 Umgebungsvariablen. Weitere Hintergrundinformationen finden Sie in diesem Abschnitt. Fügen Sie eine Datei mit dem Namen hinzu momentjs.py auf dem gleichen Niveau wie my_app.py.

flask_app / momentjs.py

von jinja2 import Markup-Klasse momentjs (object): def __init __ (self, timestamp): self.timestamp = timestamp # Wrapper für den Aufruf von moment.js Methode def render (self, format): return Markup (""% (self.timestamp.strftime ("% Y-% m-% dT% H:% M:% S "), format)) # Formatierungszeit def format (self, fmt): Rückgabe self.render (" format (\ "% s \") "% fmt) def calendar (self): return self.render (" calendar () ") def fromNow (self): return self.render (" fromNow () ")

Fügen Sie die folgende Zeile hinzu flask_app / my_app.py nach dem App Initialisierung. Das wird das hinzufügen Momente Klasse zu Jinja Umgebungsvariablen.

# Set jinja template global app.jinja_env.globals ['momentjs'] = momentjs

Jetzt kann moment.js verwendet werden, um Datum und Uhrzeit in Vorlagen wie folgt zu formatieren:

Aktuelle Uhrzeit: momentjs (Zeitmarke) .calendar ()


Zeit: momentjs (Zeitstempel) .format ('JJJJ-MM-TT HH: mm: ss')


Von jetzt an: momentjs (timestamp) .fromNow ()

 

Fazit

In dieser Tutorialserie haben wir die Grundlagen des Jinja2-Templates aus der Sicht von Flask behandelt. Wir haben mit den Grundlagen von Jinja2 begonnen und gelernt, wie man die Vorlagenstruktur auslegt und Vererbungsmuster einsetzt. 

Dann haben wir einige angepasste Kontextprozessoren, Filter und Makros erstellt, die sich für fortgeschrittenes Templates als sehr nützlich erweisen. Das abschließende Tutorial behandelte, wie moment.js zusammen mit Jinja2 verwendet werden kann, um eine äußerst flexible und leistungsfähige Datumsformatierung zu erstellen.