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_timedeltapara eso y registrarlo como filtro similar al ejemplo de fecha y hora que se proporciona aquí.
datetimeobjeto desde el módulo de Pythondatetime, pero está intentando formatear unstruct_timeobjeto desde eltimemódulo de bajo nivel .struct_timelos objetos no tienen unstrftime()método, aunque puede haber unstrftime()método global en el paquete de tiempo. Pero te recomiendo que uses eldatetimepaquete 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
dateutilynative?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