Opened 4 years ago
Closed 4 years ago
#33396 closed New feature (fixed)
Add the ResolverMatch's name to the technical 500 page.
| Reported by: | Keryn Knight | Owned by: | Hrushikesh Vaidya | 
|---|---|---|---|
| Component: | Error reporting | Version: | dev | 
| Severity: | Normal | Keywords: | |
| Cc: | Hrushikesh Vaidya | Triage Stage: | Ready for checkin | 
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
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 ResolverMatchis separately aware that thefuncmight be afunctools.partial, but only within the__repr__
So it's possible there could be some tidying up/DRY aside from those edges.
Change History (9)
comment:1 by , 4 years ago
| Triage Stage: | Unreviewed → Accepted | 
|---|
comment:2 by , 4 years ago
| Owner: | set to | 
|---|---|
| Status: | new → assigned | 
comment:3 by , 4 years ago
| Cc: | added | 
|---|
comment:4 by , 4 years ago
I have a quick PR for an initial patch that addresses the feature, except the DRYing up of the technical 404 and ResolverMatch.
comment:5 by , 4 years ago
| Has patch: | set | 
|---|---|
| Needs tests: | set | 
| Owner: | changed from to | 
| Patch needs improvement: | set | 
I hope you don't mind Keryn.
comment:6 by , 4 years ago
| Needs tests: | unset | 
|---|---|
| Patch needs improvement: | unset | 
comment:7 by , 4 years ago
| Triage Stage: | Accepted → Ready for checkin | 
|---|
Sounds reasonable.