Django # Грабли с отловом exceptions в декорированных views # Debug output for decorated views fails

Нашел грабли :) Надо будет сделать баг-репорт, но пока - просто workaround.

Грабли - если view задекорирован и в нем возникает ошибка, то джанга не всегда правильно обрабатывает traceback - дебажный вывод не показывает, точнее слетает в самом дебажном выводе :)

Пример:

from decorators import render_to

@render_to('main.html')
def main_view(request):
    # тут что-то пошло не так
    raise Exception('AAA!!!')
    return context

Так вот, чтобы дебажный вывод работал правильно (как обычно), render_to должен быть объявлен:

  • либо в этом же модуле view
  • либо в другом package’е

Если render_to импортится из того же package, что и view, то дебажный вывод сходит с ума и не может правильно определить, в каком файле произошла ошибка.

То есть, вот так - сломается: есть views.py, где лежат views, и рядом decorators.py, в котором объявлен render_to.

Работает - так (main_view должен быть не в myproject.utils :)

from myproject.utils.decorators import render_to

# ...

Notes

  1. rudyryk posted this