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.
* stage: Unreviewed => Accepted
Comment:
Sounds reasonable.
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:1>
* owner: (none) => Keryn Knight
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:2>
* cc: Hrushikesh Vaidya (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:3>
Comment (by Hrushikesh Vaidya):
I have a quick [https://github.com/django/django/pull/15286 PR] for an
initial patch that addresses the feature, except the DRYing up of the
technical 404 and ResolverMatch.
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:4>
* owner: Keryn Knight => Hrushikesh Vaidya
* needs_better_patch: 0 => 1
* has_patch: 0 => 1
* needs_tests: 0 => 1
Comment:
I hope you don't mind Keryn.
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:5>
* needs_better_patch: 1 => 0
* needs_tests: 1 => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:6>
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:7>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"4099e6e73744ef6a609b578020219f6e4647dd7e" 4099e6e7]:
{{{
#!CommitTicketReference repository=""
revision="4099e6e73744ef6a609b578020219f6e4647dd7e"
Refs #33396 -- Added django.views.debug.get_caller() hook.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:8>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"6815da6e9497a9a630d9f3637a51134d868bcd5b" 6815da6e]:
{{{
#!CommitTicketReference repository=""
revision="6815da6e9497a9a630d9f3637a51134d868bcd5b"
Fixed #33396 -- Added view name to technical 500 debug page.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/33396#comment:9>