Menggunakan Jinja2, bagaimana cara memformat bidang tanggal? Saya tahu dengan Python saya bisa melakukan ini:
print(car.date_of_manufacture.strftime('%Y-%m-%d'))
Tapi bagaimana cara memformat tanggal di Jinja2?
Ada dua cara untuk melakukannya. Pendekatan langsung adalah dengan memanggil (dan mencetak) metode strftime () dalam template Anda, misalnya
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Lain, pendekatan yang jauh lebih baik adalah dengan mendefinisikan filter Anda sendiri, misalnya:
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)
(Filter ini didasarkan pada babel karena alasan mengenai i18n, tetapi Anda juga dapat menggunakan strftime). Keuntungan dari filter ini adalah, Anda dapat menulis
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
yang terlihat lebih bagus dan lebih mudah dikelola. Filter umum lainnya juga adalah filter "timedelta", yang mengevaluasi ke sesuatu seperti "ditulis 8 menit yang lalu". Anda dapat menggunakannya babel.dates.format_timedelta
untuk itu, dan mendaftarkannya sebagai filter yang mirip dengan contoh waktu yang diberikan di sini.
datetime
objek dari modul pythondatetime
, tetapi Anda mencoba memformatstruct_time
objek daritime
modul tingkat rendah .struct_time
objek tidak memilikistrftime()
metode, walaupun mungkin adastrftime()
metode global dalam paket waktu. Tetapi saya menyarankan Anda untuk menggunakan paket tingkat tinggi (platform independen)datetime
sebagai gantinya.babel.dates.format_datetime(value, format)
Inilah filter yang akhirnya saya gunakan untuk strftime di Jinja2 dan Flask
Dan kemudian Anda menggunakan filter seperti ini:
sumber
dateutil
dannative
?Saya pikir Anda harus menulis filter sendiri untuk itu. Ini sebenarnya contoh untuk filter khusus dalam dokumentasi: http://jinja.pocoo.org/docs/api/#custom-filters
sumber
Jika Anda berurusan dengan objek waktu level yang lebih rendah (saya sering hanya menggunakan bilangan bulat), dan tidak ingin menulis filter khusus untuk alasan apa pun, pendekatan yang saya gunakan adalah meneruskan fungsi strftime ke template sebagai variabel, di mana itu bisa disebut di mana Anda membutuhkannya.
Sebagai contoh:
Yang kemudian dapat digunakan dalam
sometemplate.html
:sumber
Anda dapat menggunakannya seperti ini di template tanpa filter
sumber
Pengguna Google App Engine: Jika Anda pindah dari Django ke Jinja2, dan ingin mengganti filter tanggal, perhatikan bahwa% kode pemformatan berbeda.
Kode strftime% ada di sini: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
sumber
dalam labu, dengan babel, saya suka melakukan ini:
digunakan dalam templat dengan
{{mydatetimeobject|dt}}
jadi tidak dengan babel Anda dapat menentukan berbagai format Anda di messages.po seperti ini misalnya:
sumber
Ada ekstensi jinja2 yang dapat Anda gunakan hanya perlu instal pip ( https://github.com/hackebrot/jinja2-tim )
sumber