Templering med Jinja2 i kolbe Formatering av dato og klokkeslett med moment.js

I den første og andre delen av denne tredelte opplæringsserien så vi hvordan man legger ut malstrukturen i en flaskbasert applikasjon ved hjelp av Jinja2 på en modulær måte og hvordan man oppretter egendefinerte kontekstprosessorer, filtre og makroer i Jinja2. 

I denne delen vil vi dekke hvordan du implementerer avansert dato og klokkeslettformatering på malnivå i Jinja2 ved hjelp av moment.js.

Starter

Formatering av dato og klokkeslett er en smertefull ting å håndtere i webapplikasjoner. Å håndtere dem på nivået av Python, ved hjelp av datetime biblioteket, øker overhead og er ganske komplisert når det gjelder å håndtere tidssoner riktig. Vi bør standardisere tidsstemplene til UTC når de lagres i databasen, men da må tidsstemplene behandles hver gang de må presenteres for brukerne over hele verden..

Det er en smart ting å utsette denne behandlingen på klientsiden, det vil si nettleseren. Nettleseren kjenner alltid den nåværende tidssonen til brukeren og vil kunne gjøre datoen og tidsmanipuleringen riktig. Dette fjerner også de nødvendige overhead fra våre applikasjonsservere.

Som alle JS-bibliotek, kan Moment.js bli inkludert i vår app på følgende måte. Vi må bare plassere JS-filen, moment.min.js, i statisk / js mappe. Dette kan da brukes i vår HTML-fil ved å legge til følgende setning sammen med andre JS-biblioteker:

Den grunnleggende bruken av Moment.js vises i følgende kode. Dette kan gjøres i nettleserkonsollen for JavaScript:

>>> øyeblikk (). kalender (); "I dag klokken 21:37" >>> øyeblikk (). EndOf ('dag'). FraNow (); "i 2 timer" >>> øyeblikk (). format ('LLLL'); "Onsdag 27. januar 2016 21:38"

For å bruke Moment.js i vår søknad, vil den beste måten være å skrive en wrapper i Python og bruke den via jinja2 Miljøvariabler. Se denne runnable for mer bakgrunn. Legg til en fil som heter momentjs.py på samme nivå som my_app.py.

flask_app / momentjs.py

fra jinja2 import Markup klasse momentjs (objekt): def __init __ (selvstendige tidsstempel): self.timestamp = tidsstempel # Wrapper å ringe moment.js metode def render (selv, format): return Markup (""% (self.timestamp.strftime ("% Y-% m-% dT% H:% M:% S "), format)) # Format tid def format (self, fmt): return self.render (selvstendig): return self.render ("calendar ()") def fromNow (selv): return self.render ("fromNow ()")

Legg til følgende linje i flask_app / my_app.py etter app initialisering. Dette vil legge til momentjs klasse til jinja Miljøvariabler.

# Angi jinja mal global app.jinja_env.globals ['momentjs'] = momentjs

Nå moment.js kan brukes til å formatere dato og klokkeslett i maler som følger:

Nåværende tid: momentjs (tidsstempel) .calendar ()


Tid: momentjs (tidsstempel) .format ('ÅÅÅÅ-MM-DD HH: mm: ss')


Fra nå: momentjs (tidsstempel) .fraNå ()

 

Konklusjon

I denne opplæringsserien dekket vi grunnleggende om Jinja2-templering fra flaskens perspektiv. Vi startet med veldig grunnleggende om Jinja2 og lærte de beste praksiser på hvordan å legge ut malstrukturen og utnytte arvsmønstre. 

Da opprettet vi noen tilpassede kontekstprosessorer, filtre og makroer som kommer veldig praktisk i avansert templering. Den endelige opplæringen dekket hvordan moment.js kan brukes sammen med Jinja2 for å skape svært fleksibel og kraftig datetimeformatering.