﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
15034	Django's pretty error handling fails if there's a callable local var that generates an exception in the stack trace.	Tai Lee	nobody	"To reproduce, just add the following to any known working view:

{{{
from django.forms import BaseForm
raise Exception
}}}

Instead of getting Django's pretty error handling, you will get a raw traceback in your browser that has nothing to do with the Exception you raised.

The reason why is that `TECHNICAL_500_TEMPLATE` contains `{{ var.1|pprint|force_escape }}` which triggers a call to `Variable().resolve()` which tries calling `var.1` (since it is callable) before passing it into the `pprint` filter.

If `var.1` raises an exception when called, as `BaseForm` does (by design in this case as it's not meant to be called directly), the pretty error handling is hijacked and you have no idea what caused it.

The fix is to call pprint() and force_escape() on each frame's local vars before passing them to the template as context.
"		closed	Core (Other)	dev		duplicate	debug template 500 error exception hijacked		Unreviewed	1	0	0	0	0	0
