Usando Jinja2, ¿cómo formateo un campo de fecha? Sé que en Python simplemente puedo hacer esto:
print(car.date_of_manufacture.strftime('%Y-%m-%d'))
Pero, ¿cómo formateo la fecha en Jinja2?
Hay dos maneras de hacerlo. El enfoque directo sería simplemente llamar (e imprimir) el método strftime () en su plantilla, por ejemplo
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Otro enfoque visualmente mejor sería definir su propio filtro, por ejemplo:
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)
(Este filtro se basa en babel por razones relacionadas con i18n, pero también puede usar strftime). La ventaja del filtro es que puedes escribir
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
que se ve mejor y es más fácil de mantener. Otro filtro común es también el filtro "timedelta", que se evalúa como "escrito hace 8 minutos". Puede usar babel.dates.format_timedelta
para eso y registrarlo como filtro similar al ejemplo de fecha y hora que se proporciona aquí.
datetime
objeto desde el módulo de Pythondatetime
, pero está intentando formatear unstruct_time
objeto desde eltime
módulo de bajo nivel .struct_time
los objetos no tienen unstrftime()
método, aunque puede haber unstrftime()
método global en el paquete de tiempo. Pero te recomiendo que uses eldatetime
paquete de alto nivel (independiente de la plataforma) .babel.dates.format_datetime(value, format)
Aquí está el filtro que terminé usando durante el tiempo de ejecución en Jinja2 y Flask
Y luego usas el filtro así:
fuente
dateutil
ynative
?Creo que tienes que escribir tu propio filtro para eso. En realidad, es el ejemplo de los filtros personalizados en la documentación: http://jinja.pocoo.org/docs/api/#custom-filters
fuente
Si se trata de un objeto de tiempo de nivel inferior (a menudo solo uso números enteros), y no quiero escribir un filtro personalizado por el motivo que sea, un enfoque que uso es pasar la función strftime a la plantilla como una variable, donde se puede llamar donde lo necesite.
Por ejemplo:
Que luego se puede usar dentro de
sometemplate.html
:fuente
Puede usarlo así en la plantilla sin ningún filtro
fuente
Usuarios de Google App Engine: si se está mudando de Django a Jinja2 y desea reemplazar el filtro de fecha, tenga en cuenta que los códigos de formato% son diferentes.
Los códigos de% de strftime están aquí: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
fuente
en matraz, con babel, me gusta hacer esto:
utilizado en la plantilla con
{{mydatetimeobject|dt}}
así que no, con babel puede especificar sus diversos formatos en mensajes.po como este, por ejemplo:
fuente
Hay una extensión jinja2 que puede usar, solo necesita instalar pip ( https://github.com/hackebrot/jinja2-tim )
fuente