modelos examples documentacion bootstrap python django templates django-templates template-engine

python - examples - ¿Cómo uso las plantillas de Django sin el resto de Django?



documentacion de django (13)

¿Alguna razón en particular por la que quieres usar las plantillas de Django? Tanto Jinja como Genshi son, en mi opinión, superiores.

Si realmente lo desea, consulte la documentación de Django en settings.py . Especialmente en la sección "Usar la configuración sin configurar DJANGO_SETTINGS_MODULE ". Usa algo como esto:

from django.conf import settings settings.configure (FOO=''bar'') # Your settings go here

Quiero usar el motor de plantillas de Django en mi código (Python), pero no estoy construyendo un sitio web basado en Django. ¿Cómo lo uso sin tener un archivo settings.py (y otros) y tener que establecer la variable de entorno DJANGO_SETTINGS_MODULE?

Si ejecuto el siguiente código:

>>> import django.template >>> from django.template import Template, Context >>> t = Template(''My name is {{ my_name }}.'')

Yo obtengo:

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.


De acuerdo con la documentación de Jinja, el soporte de Python 3 aún es experimental . Entonces, si está en Python 3 y el rendimiento no es un problema, puede usar el motor de plantillas integrado de django.

Django 1.8 introdujo soporte para múltiples motores de plantillas, lo que requiere un cambio en la forma en que se inicializan las plantillas. Debe configurar explícitamente los settings.DEBUG configuración.DEBUG, que es el motor de plantillas predeterminado que proporciona django. Aquí está el código para usar plantillas sin usar el resto de django.

from django.template import Template, Context from django.template.engine import Engine from django.conf import settings settings.configure(DEBUG=False) template_string = "Hello {{ name }}" template = Template(template_string, engine=Engine()) context = Context({"name": "world"}) output = template.render(context) #"hello world"



Google AppEngine Engine usa el motor de plantillas de Django. ¿Has mirado cómo lo hacen? Podrías simplemente usar eso.


Gracias por ayudar a la gente. Aquí hay una adición más. El caso donde necesita usar etiquetas de plantilla personalizadas.

Supongamos que tiene esta etiqueta de plantilla importante en el módulo read.py

from django import template register = template.Library() @register.filter(name=''bracewrap'') def bracewrap(value): return "{" + value + "}"

Este es el archivo de plantilla html "temp.html":

{{var|bracewrap}}

Finalmente, aquí hay una secuencia de comandos de Python que se vinculará a todos juntos

import django from django.conf import settings from django.template import Template, Context import os #load your tags from django.template.loader import get_template django.template.base.add_to_builtins("read") # You need to configure Django a bit settings.configure( TEMPLATE_DIRS=(os.path.dirname(os.path.realpath(__file__)), ), ) #or it could be in python #t = Template(''My name is {{ my_name }}.'') c = Context({''var'': ''.com rox''}) template = get_template("temp.html") # Prepare context .... print template.render(c)

El resultado sería

{.com rox}


La solución es simple. En realidad está bien documentado , pero no es tan fácil de encontrar. (Tuve que investigar, no apareció cuando intenté algunas búsquedas de Google diferentes).

El siguiente código funciona:

>>> from django.template import Template, Context >>> from django.conf import settings >>> settings.configure() >>> t = Template(''My name is {{ my_name }}.'') >>> c = Context({''my_name'': ''Daryl Spitzer''}) >>> t.render(c) u''My name is Daryl Spitzer.''

Consulte la documentación de Django (vinculada anteriormente) para obtener una descripción de algunas de las configuraciones que quiera definir (como argumentos de palabras clave para configurar).


Me hago eco de las declaraciones anteriores. Jinja 2 es un muy buen superconjunto de plantillas de Django para uso general. Creo que están trabajando para hacer que las plantillas de Django estén un poco menos acopladas a settings.py, pero Jinja debería hacerlo bien para ti.


Mientras se ejecuta el shell manage.py :

>>> from django import template >>> t = template.Template(''My name is {{ me }}.'') >>> c = template.Context({''me'': ''ShuJi''}) >>> t.render(c)


No lo hagas Use StringTemplate en StringTemplate lugar; no hay ninguna razón para considerar cualquier otro motor de plantilla una vez que lo sepa.


Una adición a lo que escribió otro, si desea utilizar la Plantilla Django en Django> 1.7, debe dar su configuración. Configure (...) llame a la variable TEMPLATES y llame a django.setup () de esta manera:

from django.conf import settings settings.configure(TEMPLATES=[ { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', ''DIRS'': [''.''], # if you want the templates from a file ''APP_DIRS'': False, # we have no apps }, ]) import django django.setup()

Luego puede cargar su plantilla como normalmente, desde una cadena:

from django import template t = template.Template(''My name is {{ name }}.'') c = template.Context({''name'': ''Rob''}) t.render(c)

Y si escribió la variable DIRS en .configure, desde el disco:

from django.template.loader import get_template t = get_template(''a.html'') t.render({''name'': 5})

Error de Django: no se configuró ningún back-end de DjangoTemplates

http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts


Yo diría Jinja también. Definitivamente es más poderoso que Django Templating Engine y es independiente .

Si se trataba de un complemento externo a una aplicación Django existente, podría crear un comando personalizado y utilizar el motor de plantillas en el entorno de proyectos. Me gusta esto;

manage.py generatereports --format=html

Pero no creo que valga la pena usar el motor de plantillas Django en lugar de Jinja.


Yo también recomendaría jinja2. Hay un buen artículo sobre django vs. jinja2 que brinda información detallada sobre por qué debería preferir el último.


Jinja2 syntax Jinja2 es más o menos la misma que la de Django con muy pocas diferencias, y obtienes un motor de plantillas mucho más poderoso, que también compila tu plantilla en código de bytes (¡RÁPIDO!).

Lo uso para plantillas, incluso en Django, y es muy bueno. También puede escribir fácilmente extensiones si falta alguna característica que desee.

Aquí hay alguna demostración de la generación de código:

>>> import jinja2 >>> print jinja2.Environment().compile(''{% for row in data %}{{ row.name | upper }}{% endfor %}'', raw=True) from __future__ import division from jinja2.runtime import LoopContext, Context, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join name = None def root(context, environment=environment): l_data = context.resolve(''data'') t_1 = environment.filters[''upper''] if 0: yield None for l_row in l_data: if 0: yield None yield unicode(t_1(environment.getattr(l_row, ''name''))) blocks = {} debug_info = ''1=9''