Queremos brindarte la mejor solución que descubrimos en todo internet. Queremos que te resulte útil y si puedes comentarnos cualquier detalle que nos pueda ayudar a mejorar siéntete libre de hacerlo..
Solución:
Me gusta la respuesta de @ assem-chelli. Voy a hacer una demostración en una plantilla Jinja2.
#!/bin/env python3
import datetime
from jinja2 import Template
template = Template("""
# Generation started on now()
... this is the rest of my template...
# Completed generation.
""")
template.globals['now'] = datetime.datetime.utcnow
print(template.render())
Producción:
# Generation started on 2017-11-14 15:48:06.507123
... this is the rest of my template...
# Completed generation.
Deberías usar datetime
biblioteca de Python, obtenga el tiempo y páselo como una variable a la plantilla:
>>> import datetime
>>> datetime.datetime.utcnow()
'2015-05-15 05:22:17.953439'
Para cualquiera que quiera agregar el now
Vuelva a colocar la etiqueta en Jinja2 de forma permanente, hay un gran ejemplo de cómo agregarlo como una extensión de Jinja aquí: https://www.webforefront.com/django/useandcreatejinjaextensions.html
Esto requiere definir una nueva extensión Jinja dentro de un script de python dentro de su aplicación web Django y luego importarla como una extensión en settings.py
.
En your_web_app/some_file.py
(Lo puse en el mismo directorio que settings.py
):
from jinja2 import lexer, nodes
from jinja2.ext import Extension
from django.utils import timezone
from django.template.defaultfilters import date
from django.conf import settings
from datetime import datetime
class DjangoNow(Extension):
tags = set(['now'])
def _now(self, date_format):
tzinfo = timezone.get_current_timezone() if settings.USE_TZ else None
formatted = date(datetime.now(tz=tzinfo),date_format)
return formatted
def parse(self, parser):
lineno = next(parser.stream).lineno
token = parser.stream.expect(lexer.TOKEN_STRING)
date_format = nodes.Const(token.value)
call = self.call_method('_now', [date_format], lineno=lineno)
token = parser.stream.current
if token.test('name:as'):
next(parser.stream)
as_var = parser.stream.expect(lexer.TOKEN_NAME)
as_var = nodes.Name(as_var.value, 'store', lineno=as_var.lineno)
return nodes.Assign(as_var, call, lineno=lineno)
else:
return nodes.Output([call], lineno=lineno)
Entonces, en settings.py
agregue la clase DjangoNow a la extensions
lista debajo OPTIONS
dentro de TEMPLATES
:
TEMPLATES = [
...
'BACKEND':'django.template.backends.jinja2.Jinja2',
...
'OPTIONS':
...,
'extensions': [
'your-app-name.some-file.DjangoNow',
],
]
Luego puede usar la etiqueta now tal como la usaría con Django, por ejemplo:
% now 'U' %