python3 - ¿Cómo depurar la plantilla de Jinja2?
police vs jinja (2)
Estoy usando el sistema de plantillas jinja2 en django. Es realmente rápido y me gusta mucho. Sin embargo, tengo algunos problemas para depurar plantillas: si hago algunos errores en una plantilla (etiqueta incorrecta, nombre de archivo incorrecto, final de bloque incorrecto ...), no tengo toda la información sobre este error.
Por ejemplo, en una vista de django, escribo esto:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader(''main'', ''templates''))
def jinja(req):
template = env.get_template(''jinja.html'')
output=template.render(myvar=''hello'')
return HttpResponse(output)
Escribo una plantilla jinja2: jinja.html:
{{myvar|notexistingfilter()}} Jinja !
Aviso, puse a propósito un filtro no existente para generar un error:
Esperaba algo así como "notexistingfilter () no definido", pero solo obtuve un simple rastreo en blanco y negro (no es el habitual mensaje de depuración de django):
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 279, in run
self.result = application(self.environ, self.start_response)
File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 651, in __call__
return self.application(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__
response = self.get_response(request)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 134, in get_response
return self.handle_uncaught_exception(request, resolver, exc_info)
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 40, in technical_500_response
html = reporter.get_traceback_html()
File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 84, in get_traceback_html
self.get_template_exception_info()
File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 117, in get_template_exception_info
origin, (start, end) = self.exc_value.source
TypeError: ''Template'' object is not iterable
No obtengo el nombre de archivo de la plantilla donde ocurrió el error, no hay información sobre el error en sí, por lo que es muy difícil depurar jinja2.
¿Qué debo hacer para tener más información de depuración y encontrar dónde está el error dentro de una plantilla jinja2?
Gracias de antemano,
De la Documentación Jinja2:
Mis rastreos se ven raros. ¿Qué esta pasando?
Si el módulo de aceleraciones no está compilado y está usando una instalación de Python sin ctypes (Python 2.4 sin ctypes, Jython o el motor de aplicación de Google), Jinja2 no puede proporcionar la información de depuración correcta y el rastreo puede estar incompleto. Actualmente no hay una buena solución para Jython o AppEngine, ya que los ctypes no están disponibles allí y no es posible usar la extensión de aceleración.
http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-s-happening
Después de hacer algunas pruebas más, encontré la respuesta:
Al hacer la misma prueba de plantilla, directamente en python, sin usar django, los mensajes de depuración están presentes. Así que viene de django.
La solución está en settings.py: uno tiene que establecer DEBUG en True y establecer TEMPLATE_DEBUG en False.