Usando o Jinja2, como formato um campo de data? Eu sei que em Python eu posso simplesmente fazer isso:
print(car.date_of_manufacture.strftime('%Y-%m-%d'))
Mas como formato a data no Jinja2?
Existem duas maneiras de fazer isso. A abordagem direta seria simplesmente chamar (e imprimir) o método strftime () no seu modelo, por exemplo
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Outra abordagem bastante melhor seria definir seu próprio filtro, por exemplo:
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)
(Esse filtro é baseado no babel por motivos relacionados ao i18n, mas você também pode usar o strftime). A vantagem do filtro é que você pode escrever
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
que parece melhor e é mais sustentável. Outro filtro comum também é o filtro "timedelta", que avalia algo como "escrito 8 minutos atrás". Você pode usar babel.dates.format_timedelta
para isso e registrá-lo como filtro semelhante ao exemplo de data e hora fornecido aqui.
datetime
objeto do módulo pythondatetime
, mas você está tentando formatar umstruct_time
objeto de baixo níveltime
módulo de .struct_time
objetos não possuem umstrftime()
método, embora possa haver umstrftime()
método global no pacote de horário. Mas eu recomendo que você use odatetime
pacote de alto nível (independente de plataforma) .babel.dates.format_datetime(value, format)
Aqui está o filtro que acabei usando para strftime no Jinja2 e Flask
E então você usa o filtro da seguinte maneira:
fonte
dateutil
enative
?Eu acho que você tem que escrever seu próprio filtro para isso. Na verdade, é o exemplo de filtros personalizados na documentação: http://jinja.pocoo.org/docs/api/#custom-filters
fonte
Se você está lidando com um objeto de tempo de nível inferior (geralmente uso números inteiros) e não deseja escrever um filtro personalizado por qualquer motivo, uma abordagem que utilizo é passar a função strftime para o modelo como uma variável, em que pode ser chamado onde você precisar.
Por exemplo:
Que pode ser usado em
sometemplate.html
:fonte
Você pode usá-lo desta forma no modelo sem filtros
fonte
Usuários do Google App Engine: se você estiver migrando do Django para o Jinja2 e procurando substituir o filtro de data, observe que os% de códigos de formatação são diferentes.
Os códigos strftime% estão aqui: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
fonte
no frasco, com babel, eu gosto de fazer isso:
usado no modelo com
{{mydatetimeobject|dt}}
então não com babel, você pode especificar seus vários formatos em messages.po como este, por exemplo:
fonte
Há uma extensão jinja2 que você pode usar, basta instalar o pip ( https://github.com/hackebrot/jinja2-tim )
fonte