#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.

Reply via email to