Как отлаживать шаблон Jinja2? - PullRequest
25 голосов
/ 05 января 2010

Я использую систему шаблонов jinja2 в django. Это действительно быстро, и мне это очень нравится. Тем не менее, у меня есть некоторые проблемы с отладкой шаблонов: Если я допущу некоторые ошибки в шаблоне (неверный тег, неправильное имя файла, неправильный конец блока ...), у меня вообще не будет информации об этой ошибке.

Например, в представлении 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 () notfined», но я получил только простую черную на белом трассировку (не обычное сообщение отладки 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?

Заранее спасибо,

Ответы [ 2 ]

17 голосов
/ 05 января 2010

Проведя еще один тест, я нашел ответ:

Выполняя тот же тест шаблона, непосредственно под python, без использования django, появляются отладочные сообщения. Так что это происходит от Джанго.

Исправление в файле settings.py: необходимо установить для параметра DEBUG значение True, а для параметра TEMPLATE_DEBUG значение False.

7 голосов
/ 05 января 2010

Из документации Jinja2:

Мои следы выглядят странно. Что происходит?

Если модуль ускорений не скомпилирован и вы используете установку Python без ctypes (Python 2.4 без ctypes, Jython или Google AppEngine), Jinja2 не может предоставить правильную информацию об отладке, и трассировка может быть неполной. В настоящее время нет хорошего обходного пути для Jython или AppEngine, так как там недоступен ctypes и невозможно использовать расширение speedups.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...