Wie formatiere ich mit Jinja2 ein Datumsfeld? Ich weiß, dass ich in Python einfach Folgendes tun kann:
print(car.date_of_manufacture.strftime('%Y-%m-%d'))
Aber wie formatiere ich das Datum in Jinja2?
Es gibt zwei Möglichkeiten, dies zu tun. Der direkte Ansatz wäre beispielsweise, einfach die strftime () -Methode in Ihrer Vorlage aufzurufen (und zu drucken)
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Ein anderer, deutlich besserer Ansatz wäre, einen eigenen Filter zu definieren, z.
from flask import Flask
import babel
app = Flask(__name__)
@app.template_filter()
def format_datetime(value, format='medium'):
if format == 'full':
format="EEEE, d. MMMM y 'at' HH:mm"
elif format == 'medium':
format="EE dd.MM.y HH:mm"
return babel.dates.format_datetime(value, format)
(Dieser Filter basiert aus Gründen in Bezug auf i18n auf babel, aber Sie können auch strftime verwenden). Der Vorteil des Filters ist, dass Sie schreiben können
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
Das sieht besser aus und ist wartbarer. Ein weiterer gebräuchlicher Filter ist auch der "timedelta" -Filter, der so etwas wie "vor 8 Minuten geschrieben" ergibt. Sie können dies verwenden babel.dates.format_timedelta
und als Filter registrieren, ähnlich dem hier angegebenen Datum / Uhrzeit-Beispiel.
datetime
Objekts aus dem Python-Moduldatetime
, aber Sie versuchen, einstruct_time
Objekt aus dem Low-Level-time
Modul zu formatieren .struct_time
Objekte haben keinestrftime()
Methode, obwohl das Zeitpaket möglicherweise eine globalestrftime()
Methode enthält. Ich empfehle Ihnen jedoch,datetime
stattdessen das High-Level- Paket (plattformunabhängig) zu verwenden.babel.dates.format_datetime(value, format)
Hier ist der Filter, den ich für strftime in Jinja2 und Flask verwendet habe
Und dann benutzt du den Filter so:
quelle
dateutil
undnative
?Ich denke, Sie müssen Ihren eigenen Filter dafür schreiben. Dies ist das Beispiel für benutzerdefinierte Filter in der Dokumentation: http://jinja.pocoo.org/docs/api/#custom-filters
quelle
Wenn Sie mit einem Zeitobjekt niedrigerer Ebene arbeiten (ich verwende oft nur Ganzzahlen) und aus irgendeinem Grund keinen benutzerdefinierten Filter schreiben möchten, übergebe ich die strftime-Funktion als Variable an die Vorlage Es kann dort aufgerufen werden, wo Sie es brauchen.
Beispielsweise:
Welches kann dann verwendet werden in
sometemplate.html
:quelle
Sie können es so in der Vorlage ohne Filter verwenden
quelle
Nutzer der Google App Engine: Wenn Sie von Django zu Jinja2 wechseln und den Datumsfilter ersetzen möchten, beachten Sie, dass die% -Formatierungscodes unterschiedlich sind.
Die strftime% -Codes finden Sie hier: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
quelle
In einer Flasche mit Babel mache ich das gerne:
in der Vorlage mit verwendet
{{mydatetimeobject|dt}}
Also nein, mit Babel können Sie Ihre verschiedenen Formate in messages.po wie folgt angeben:
quelle
Es gibt eine jinja2-Erweiterung, die Sie verwenden können. Sie benötigen lediglich eine Pip-Installation ( https://github.com/hackebrot/jinja2-tim ).
quelle