Quiero usar el motor de plantillas Django en mi código (Python), pero no estoy creando un sitio web basado en Django. ¿Cómo lo uso sin tener un archivo settings.py (y otros) y tener que configurar 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.
python
django
templates
django-templates
template-engine
Daryl Spitzer
fuente
fuente
settings.configure()
.La sintaxis de Jinja2 es prácticamente 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 crear plantillas, incluso en Django, y es muy bueno. También puede escribir extensiones fácilmente si falta alguna característica que desee.
Aquí hay una demostración de la generación de código:
fuente
¿Alguna razón en particular por la que desea utilizar 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 la sección "Uso de la configuración sin configurarDJANGO_SETTINGS_MODULE
". Usa algo como esto:fuente
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 la última.fuente
{% set %}
sintaxis y la igualdad con el motor de plantillas Twig (PHP). Es mejor escribir código multiplataforma siempre, pero la diferencia de rendimiento no es crítica; por ejemplo, Python siempre funcionará más lento que PHP, por lo que si necesita rendimiento, es mejor que cree un sitio con PHP, Twig y Symfony2 o más. Triste pero verdad.Según la documentación de Jinja, la compatibilidad con 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
settings.DEBUG
cuál es el que usa el motor de plantilla predeterminado proporcionado por django. Aquí está el código para usar plantillas sin usar el resto de django.fuente
Además de lo que otros escribieron, si quieres usar Django Template en Django> 1.7, debes darle a tu settings.configure (...) llamar a la variable TEMPLATES y llamar a django.setup () así:
Luego puede cargar su plantilla como normalmente, desde una cadena:
Y si escribió la variable DIRS en .configure, desde el disco:
Error de Django: no se ha configurado ningún backend de DjangoTemplates
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
fuente
Yo diría que también Jinja . Definitivamente es más poderoso que Django Templating Engine y es independiente .
Si se trataba de un complemento externo para una aplicación Django existente, podría crear un comando personalizado y usar el motor de plantillas dentro de su entorno de proyectos. Me gusta esto;
Pero no creo que valga la pena usar el motor de plantillas Django en lugar de Jinja.
fuente
Gracias por la ayuda, amigos. Aquí hay una adición más. El caso en el que necesita utilizar etiquetas de plantilla personalizadas.
Digamos que tiene esta etiqueta de plantilla importante en el módulo read.py
Este es el archivo de plantilla html "temp.html":
Finalmente, aquí hay un script de Python que se vinculará a todos juntos
La salida sería
fuente
django.template.base.add_to_builtins("read")
plantea unValueError
para mí.TemplateDoesNotExist
error Estoy usando django 1.10.1Encontró esto:
http://snippets.dzone.com/posts/show/3339
fuente
No lo hagas. Use StringTemplate en su lugar; no hay razón para considerar ningún otro motor de plantilla una vez que lo sepa.
fuente
Hago eco de las declaraciones anteriores. Jinja 2 es un superconjunto bastante bueno 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 funcionar bien para ti.
fuente
Mientras ejecuta el
manage.py
shell:fuente
Google
AppEngine
usa el motor de plantillas Django, ¿has echado un vistazo a cómo lo hacen? Posiblemente podrías usar eso.fuente