如何调试Jinja2模板? [英] How to debug Jinja2 template?

查看:111
本文介绍了如何调试Jinja2模板?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在jango中使用jinja2模板系统. 这真的非常快,我非常喜欢. 不过,我在调试模板时遇到了一些问题: 如果我在模板中犯了一些错误(标记错误,过滤器名称错误,块结尾错误...),则我完全没有有关此错误的信息.

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.

例如,在django视图中,我这样写:

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)

我写了一个jinja2模板:jinja.html:

I write a jinja2 template : jinja.html :

{{myvar|notexistingfilter()}} Jinja !

注意,我故意使用一个不存在的过滤器来生成错误:

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

我期待的是类似"notexistingfilter()未定义"之类的东西,但是我只有一个简单的黑底白底回溯(不是通常的django调试消息):

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

我没有得到发生错误的模板文件名,也没有关于错误本身的信息,因此调试jinja2非常困难.

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.

要获取更多调试信息并查找jinja2模板中的错误,该怎么办?

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

先谢谢您

推荐答案

进行了更多测试之后,我找到了答案:

After doing some more test, I found the answer :

通过直接在python下进行相同的模板测试,而无需使用django,会出现调试消息.所以它来自django.

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

此修复程序在settings.py中:必须将DEBUG设置为True并将TEMPLATE_DEBUG设置为False.

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

这篇关于如何调试Jinja2模板?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆