Saltar al contenido

Cómo obtener la hora actual en jinja

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.pyagregue 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' %

Reseñas y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *