How to debug Jinja2 template?

ぐ巨炮叔叔 提交于 2021-02-06 09:41:53

问题


I am using jinja2 template system into django. It is really fast and I like it a lot. Nevertheless, I have some problem to debug templates : If I make some errors into a template (bad tag, bad filtername, bad end of block...), I do not have at all information about this error.

For example, In a django view, I write this :

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)

I write a jinja2 template : jinja.html :

{{myvar|notexistingfilter()}} Jinja !

Notice, I put on purpose an non existing filter to generate an error :

I was expecting something like "notexistingfilter() not defined", but I got only a simple black on white traceback (not the usual django debug message) :

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

I do not get the template filename where the error occured, no information about the error itself, so it is very difficult to debug jinja2.

What should I do to have more debug information and find where an error is inside a jinja2 template ?

Thank you in advance,


回答1:


After doing some more test, I found the answer :

By doing the same template test, directly under python, without using django, debug messages are present. So it comes from django.

The fix is in settings.py : One have to set DEBUG to True AND set TEMPLATE_DEBUG to False.




回答2:


From the Jinja2 Documentation:

My tracebacks look weird. What’s happening?

If the speedups module is not compiled and you are using a Python installation without ctypes (Python 2.4 without ctypes, Jython or Google’s AppEngine) Jinja2 is unable to provide correct debugging information and the traceback may be incomplete. There is currently no good workaround for Jython or the AppEngine as ctypes is unavailable there and it’s not possible to use the speedups extension.

http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-s-happening



来源:https://stackoverflow.com/questions/2002357/how-to-debug-jinja2-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!