Cómo obtener el tiempo actual en jinja

¿Cuál es el método para obtener la fecha actual valor de tiempo en jinja etiquetas ?

Sobre mi proyecto necesito mostrar el tiempo actual en UTC en la esquina superior derecha del sitio.

  • Si lo que usted ha mencionado es todos los requisitos, Considere el uso de moment.js en el nivel de cliente como en blog.miguelgrinberg.com/post/…
  • si moment.js es una opción que yo no creo que vale la pena preguntar.porque cada uno sabe cómo obtener el tiempo actual en python..
InformationsquelleAutor Vikram | 2015-05-07

3 Kommentare

  1. 12

    Me gusta @assem-chelli la respuesta. Me voy a la demo en un Jinja2 plantilla.

    #!/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())

    De salida:

    # Generation started on 2017-11-14 15:48:06.507123
    ... this is the rest of my template...
    # Completed generation.
    
  2. 7

    Debe utilizar datetime de la biblioteca de Python, obtener el tiempo y pasar como una variable a la plantilla:

    >>> import datetime
    >>> datetime.datetime.utcnow()
    '2015-05-15 05:22:17.953439'
    
  3. 2

    Para cualquier persona que quiera agregar la now etiqueta de nuevo en Jinja2 permanentemente, no es un gran ejemplo de cómo añadir un Jinja extensión aquí:
    https://www.webforefront.com/django/useandcreatejinjaextensions.html

    Esto requiere la definición de un nuevo Jinja extensión dentro de una secuencia de comandos de python dentro de su Django web de la aplicación y, a continuación, importarlo 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)
    

    Luego, en settings.py, agregar el DjangoNow de la clase a la extensions lista bajo OPTIONS dentro de TEMPLATES:

    TEMPLATES = [
        ...
        { 
            'BACKEND':'django.template.backends.jinja2.Jinja2',
            ...
            'OPTIONS': { 
                ...,
                'extensions': [
                    'your-app-name.some-file.DjangoNow',
                    ],
            }       
       }
    ]
    

    A continuación, puede utilizar el ahora de la etiqueta, como se haría uso de ella con Django, por ejemplo:

    {% now 'U' %}
    
    • En el caso de Django, usted puede pasar django.utils.timezone.now() a la plantilla y no: {{ localtime(now) }}. Esto es, si usted está utilizando django-jinja. Si no, supongo que todavía se puede hacer uso de django.templatetags.tz.localtime.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea