#33396: Add the ResolverMatch's name to the technical 500 page.
-------------------------------------------+------------------------
Reporter: Keryn Knight | Owner: (none)
Type: New feature | Status: new
Component: Error reporting | Version: dev
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------------+------------------------
Way back when in #22756, I asked for and was given a lovely addition to
the **technical 404 page**, so that when `raise Http404('...')` was used
it would report the view being executed, so that coming back to a project
and getting an error would give me a hint where to look.
It looks like this, give or take alignment:
{{{
Request Method: GET
Request URL: http://localhost:8080/egsdh
Raised by: __main__.ItemDetail
}}}
Today I'm here to ask for the same in the **technical 500 page**.
I just opened a project from ''about 3 weeks ago'' and in that short time
had apparently forgotten what views were mounted on what URLs, and however
many years after that ticket, Django still doesn't have a management
command for printing me the URLs (... sigh), so I had to go digging again
to deal with the error I'd evidently left myself.
`django.views.debug.ExceptionReporter.get_traceback_data` already has
awareness of the request (`if self.request is not None`) which it uses to
print the GET/POST/etc. I'd like to suggest that within that block, we do
something like:
{{{
if self.request is not None:
try:
view_name = self.request.resolver_match._func_path
except Exception:
view_name = None
c['view_name'] = view_name
}}}
and then adjust the template to have a `Raised by: {{ view_name }}` line
as the technical 404 page, guarding it with an `{% if %}` test. We might
want to change the label from `Raised by` across both to something like
`Raised during` or `During View` or something ...
The 500 page might thus look something like:
{{{
Request Method: GET
Request URL: http://localhost:8080/
View name: __main__.ItemList
Django Version: 4.x.x
Exception Type: ZeroDivisionError
Exception Value:division by zero
...
}}}
By the look of it, the code for the technical 404 page and the
ResolverMatch name may ''mostly'' overlap in terms of calculation/output,
except:
- #32260 was relatively recently patched into the 404 page, so that
references `.view_class`
- `ResolverMatch` is separately ''aware'' that the `func` might be a
`functools.partial`, but only within the `__repr__`
So it's possible there could be some tidying up/DRY aside from those
edges.
--
Ticket URL: <https://code.djangoproject.com/ticket/33396>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.de08036f13071008793c5400de778d2c%40djangoproject.com.