Почему мои следы дзиндзя не имеют смысла? - PullRequest
3 голосов
/ 03 апреля 2012

Не знаю почему, но в последнее время я получаю откат от рендеринга шаблонов Jinja ошибки более или менее совершенно бессмысленны.

Traceback (most recent call last):
  File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 442, in wsgi_app
    response = self.handle_exception(request, e)
  File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 430, in wsgi_app
    rv = self.dispatch(request)
  File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 559, in dispatch
    return handler(self, request)(method, **request.rule_args)
  File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 165, in __call__
    response = method(*args, **kwargs)
  File "/Users/me/my_project/app/my_package/admin/menus/editor.py", line 22, in get
    return self.edit_week(menu, year, week_num, week_nums)
  File "/Users/me/my_project/app/my_package/admin/menus/editor.py", line 44, in edit_week
    return self.respond(data, context=ctx, template="admin/menus/edit.html")
  File "/Users/me/my_project/app/my_package/lib/irender.py", line 182, in respond
    return render(self, fmt, opts)
  File "/Users/me/my_project/app/my_package/lib/irender.py", line 207, in __call__
    val = render_func(handler, **opts)
  File "/Users/me/my_project/app/my_package/lib/irender.py", line 220, in render_html
    return handler.render_template(self.template, ctx)
  File "/Users/me/my_project/app/my_package/handlers.py", line 42, in render_template
    return jinja2.get_template(template).render(accum)
  File "/Users/me/my_project/app/distlib/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "/Users/me/my_project/app/templates/admin/menus/edit.html", line 3, in top-level template code
    {% import "admin/utils.html" as utils %}
TypeError: integer argument expected, got float

Конечно, я могу определить, где именно находится ошибка, удалив большую часть шаблон и видеть, когда ошибка начинает возникать, но это глупая разработка способ.

Как мне снова сделать трассировки полезными?

Кстати, у меня есть следующее заклинание в моем main.py:

def whitelist_jinja2_debug_modules():
    from google.appengine.tools.dev_appserver import HardenedModulesHook
    HardenedModulesHook._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt']

if app.dev:
    whitelist_jinja2_debug_modules()

1 Ответ

0 голосов
/ 07 августа 2015

Несмотря на то, что этот вопрос уже довольно старый, ответ доступен (и не в то же время). Чтобы получить правильные трассировки стека в Jinja, вам нужно иметь ctypes, которые долгое время не были доступны в движке приложений Google. Я не совсем уверен в текущем статусе, но у этого вопроса есть некоторые решения для вас: Отладка Jinja2 в Google App Engine

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