À l'aide de Jinja2, comment mettre en forme un champ de date? Je sais qu'en Python, je peux simplement faire ceci:
print(car.date_of_manufacture.strftime('%Y-%m-%d'))
Mais comment formater la date dans Jinja2?
Il y a deux manières de procéder. L'approche directe serait d'appeler (et d'imprimer) simplement la méthode strftime () dans votre modèle, par exemple
{{ car.date_of_manufacture.strftime('%Y-%m-%d') }}
Une autre approche légèrement meilleure serait de définir votre propre filtre, par exemple:
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)
(Ce filtre est basé sur babel pour des raisons concernant i18n, mais vous pouvez également utiliser strftime). L'avantage du filtre est que vous pouvez écrire
{{ car.date_of_manufacture|datetime }}
{{ car.date_of_manufacture|datetime('full') }}
qui a l'air plus joli et est plus facile à entretenir. Un autre filtre commun est également le filtre "timedelta", qui évalue quelque chose comme "écrit il y a 8 minutes". Vous pouvez l'utiliser babel.dates.format_timedelta
pour cela et l'enregistrer en tant que filtre similaire à l'exemple datetime donné ici.
datetime
objet à partir du module pythondatetime
, mais vous essayez de formater unstruct_time
objet à partir dutime
module de bas niveau .struct_time
les objets n'ont pas destrftime()
méthode, bien qu'il puisse y avoir unestrftime()
méthode globale dans le package de temps. Mais je vous recommande d'utiliser ledatetime
package de haut niveau (indépendant de la plate-forme) à la place.babel.dates.format_datetime(value, format)
Voici le filtre que j'ai fini par utiliser pour strftime dans Jinja2 et Flask
Et puis vous utilisez le filtre comme ceci:
la source
dateutil
etnative
?Je pense que vous devez écrire votre propre filtre pour cela. C'est en fait l'exemple de filtres personnalisés dans la documentation: http://jinja.pocoo.org/docs/api/#custom-filters
la source
Si vous avez affaire à un objet de temps de niveau inférieur (j'utilise souvent simplement des entiers) et que vous ne voulez pas écrire de filtre personnalisé pour une raison quelconque, une approche que j'utilise consiste à passer la fonction strftime dans le modèle en tant que variable, où il peut être appelé là où vous en avez besoin.
Par exemple:
Qui peut ensuite être utilisé dans
sometemplate.html
:la source
Vous pouvez l'utiliser comme ça dans un modèle sans aucun filtre
la source
Utilisateurs de Google App Engine: si vous passez de Django à Jinja2 et que vous souhaitez remplacer le filtre de date, notez que les codes de mise en forme% sont différents.
Les codes strftime% sont ici: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
la source
en flacon, avec babel, j'aime faire ça:
utilisé dans le modèle avec
{{mydatetimeobject|dt}}
donc non avec babel vous pouvez spécifier vos différents formats dans messages.po comme ceci par exemple:
la source
Il existe une extension jinja2 que vous pouvez utiliser, il suffit d'installer pip ( https://github.com/hackebrot/jinja2-tim )
la source