python django jinja2

python - Cómo usar jinja2 como motor de plantillas en Django 1.8



(4)

Desde el website Django (consulte esto para obtener más información) en settings.py :

TEMPLATES = [ { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', ''DIRS'': [], ''APP_DIRS'': True, ''OPTIONS'': { # ... some options here ... }, }, ]

BACKEND es una ruta de Python punteada a una clase de motor de plantilla que implementa la API de backend de plantilla de Django. Los backends incorporados son django.template.backends.django.DjangoTemplates y django.template.backends.jinja2.Jinja2.

Básicamente, averigüe dónde en su archivo settings.py hay una variable de PLANTILLAS y configure el backend (o asegúrese de que el backend) se parezca a la anterior (ya que Jinga está integrado). Si todo falla, reemplaza el django.template.backends... con django.template.backends.jinja2.Jinja2 (aunque no creo que sea necesario).

He estado buscando cómo usar jinja2 en django 1.8, pero no hay una fuente completa para usar django con jinja2. Me preguntaba si ustedes sabían el proceso para usar jinja2 en django. He revisado la documentación oficial y he consultado la siguiente pregunta: ¿Cómo configurar django 1.8 para usar jinja2?

pero ninguno de ellos explica claramente cómo usar jinja2 de una manera put-togther. Acabo de empezar a usar django y no conozco toda la jerga en los documentos. Apreciaría mucho la ayuda.


Me tomó bastante tiempo averiguar todo, las respuestas aquí no fueron tan útiles.

La respuesta de Doru es la más cercana a la verdad, pero está incompleta.

Cómo usar jinja como lenguaje de plantillas:

1.Crear el archivo jinja2.py en la carpeta de su proyecto. Esto es necesario para modificar el entorno jinja2 predeterminado (en nuestro caso, pasar algunas variables globales adicionales).

Ubicación: {root}/main/jinja2.py:

from __future__ import absolute_import # Python 2 only from jinja2 import Environment from django.contrib.staticfiles.storage import staticfiles_storage from django.core.urlresolvers import reverse def environment(**options): env = Environment(**options) env.globals.update({ ''static'': staticfiles_storage.url, ''url'': reverse, }) return env

2.Agregue el backend jinja2 al archivo de configuración del proyecto django, incluido nuestro entorno modificado.

TEMPLATES = [ { ''BACKEND'': ''django.template.backends.jinja2.Jinja2'', ''DIRS'': [], ''APP_DIRS'': True, ''OPTIONS'': { ''environment'': "main.jinja2.environment", }, }, ... ]

3. Ahora ya no necesita importar jinja2 en ningún lugar, en sus vistas, usará plantillas jinja a través de django al igual que las plantillas django:

from django.shortcuts import render def index(request, **kwargs): return render(request, "index.html.j2", {''title'': ''MyTitle'', ''text'': "MyText"})

Y finalmente, con APP_DIRS configurado en True jinja buscará plantillas en todos los directorios de aplicaciones instaladas jinja2 . (a diferencia de DTL que busca templates carpeta de templates ). Si desea cambiar ese comportamiento, o desea algunos ajustes adicionales, como la coincidencia de extensión, el filtrado o las variables globales, debería mirar la extensión django-jinja.

También puede proporcionar directorios adicionales para buscar plantillas a través de la opción de configuración TEMPLATES[''DIRS''] .


Plantilla mixta de Django y Jinja2: Ambiente: Django 1.8 + Jinja2 .

Tengo algunas plantillas heredadas de Django y no es tan fácil volver a escribirlas todas a la vez en Jinja2, así que agregue esta etiqueta personalizada {% jinja_include "some_template.jinja" %} a my_custom_tags.py :

from django.template.loader import get_template from django import template register = template.Library() @register.simple_tag(takes_context=True) def jinja_include(context, filename): template = get_template(filename) return template.render(context.flatten())

Llámalo así desde tu plantilla de Django:

{% load my_custom_tags %} {% jinja_include "some_template.jinja" %}


Frist tienes que instalar jinja2 :

$ pip install Jinja2

Luego modifique su lista de TEMPLATES en la configuración.py para que contenga el jinja2 BACKEND :

TEMPLATES = [ { ''BACKEND'': ''django.template.backends.jinja2.Jinja2'', ''DIRS'': [os.path.join(BASE_DIR, ''templates/jinja2'')], ''APP_DIRS'': True, ''OPTIONS'': {''environment'': ''myproject.jinja2.Environment'',}, }, { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', ''DIRS'': [], ''APP_DIRS'': True, ''OPTIONS'': { ''context_processors'': [ ''django.template.context_processors.debug'', ''django.template.context_processors.request'', ''django.contrib.auth.context_processors.auth'', ''django.contrib.messages.context_processors.messages'', ], }, }, ]

donde templates/jinja2 es el directorio con sus archivos de plantilla jinja2.

Y en tu archivo views.py:

from __future__ import absolute_import # Python 2 only from jinja2 import Environment from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse def environment(**options): env = Environment(**options) env.globals.update({ ''static'': staticfiles_storage.url, ''url'': reverse, }) return env

Esto hace que la static y la url estén disponibles en sus plantillas de Jinja2.

PS Para más detalles vea este artículo .