我正在使用jinja2模板系统进入django。 这真的很快,我很喜欢它。 不过,调试模板时遇到一些问题: 如果我在模板中犯了一些错误(错误的标签,坏的filtername,坏的结尾......),我根本没有关于这个错误的信息。
例如,在django视图中,我写了这个:
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:
{{myvar|notexistingfilter()}} Jinja !
注意,我故意使用一个不存在的过滤器来生成错误:
我期待像“notexistingfilter()未定义”这样的东西,但我只有一个简单的黑色白色追踪(不是通常的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
我没有得到错误发生的模板文件名,没有关于错误本身的信息,因此调试jinja2非常困难。
如何获取更多调试信息并查找jinja2模板中的错误位置,我该怎么办?
提前谢谢你,
答案 0 :(得分:17)
在做了一些测试之后,我找到了答案:
通过直接在python下进行相同的模板测试,不使用django,就会出现调试消息。所以它来自django。
修复程序位于settings.py中:必须将DEBUG设置为True并将TEMPLATE_DEBUG设置为False。
答案 1 :(得分:7)
来自Jinja2文档:
我的追溯看起来很奇怪。发生了什么事?
如果未编译speedups模块并且您使用的是没有ctypes的Python安装(没有ctypes的Python 2.4,Jython或Google的AppEngine),Jinja2无法提供正确的调试信息,并且回溯可能不完整。目前没有针对Jython或AppEngine的良好解决方法,因为ctypes在那里不可用,并且无法使用speedups扩展。
http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-s-happening