Как отладить шаблон Jinja2?
Я использую систему шаблонов 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?
Заранее спасибо,
Ответы
Ответ 1
После выполнения еще одного теста я нашел ответ:
Выполняя тот же тест шаблона, непосредственно под python, без использования django, имеются сообщения отладки. Так оно и происходит из django.
Исправление находится в settings.py: нужно установить DEBUG в True и установить TEMPLATE_DEBUG на False.
Ответ 2
Из документации Jinja2:
Мои трассировки выглядят странно. Что происходит?
Если модуль ускорения не скомпилирован и вы используете установку Python без ctypes (Python 2.4 без ctypes, Jython или Googles AppEngine), Jinja2 не может предоставить правильную информацию для отладки, а трассировка может быть неполной. В настоящее время нет хорошего способа обхода решения для Jython или AppEngine, поскольку ctypes недоступно там, и невозможно использовать расширение ускорения.
http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-s-happening