template python3 police jinja python django jinja2

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.