{{{
urlpatterns = [
path('home', HomeView)
]
}}}
The error currently happens only when you first load the route (rather
than when constructing the routes), and looks like
{{{
Internal Server Error: /
Traceback (most recent call last):
File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
}}}
Which is especially hard to work out given that the traceback doesn't even
include any of the user's own code, and this is an error that's easy for
beginners to run into when first using CBVs.
My PR changes it to fail early, inside the call to django.urls.path(),
with a clear error:
{{{
URL route 'foo' should pass in 'EmptyCBView.as_view()' instead of
'EmptyCBView'
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32195>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Old description:
> We can detect early-on that the user has forgotten to call .as_view() on
> their CBV when passing it into path(). For:
>
> {{{
> urlpatterns = [
> path('home', HomeView)
> ]
> }}}
>
> The error currently happens only when you first load the route (rather
> than when constructing the routes), and looks like
>
> {{{
> Internal Server Error: /
> Traceback (most recent call last):
> File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
> packages\django\core\handlers\exception.py", line 47, in inner
> response = get_response(request)
> File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
> packages\django\core\handlers\base.py", line 179, in _get_response
> response = wrapped_callback(request, *callback_args,
> **callback_kwargs)
> TypeError: __init__() takes 1 positional argument but 2 were given
> }}}
>
> Which is especially hard to work out given that the traceback doesn't
> even include any of the user's own code, and this is an error that's easy
> for beginners to run into when first using CBVs.
>
> My PR changes it to fail early, inside the call to django.urls.path(),
> with a clear error:
>
> {{{
> URL route 'foo' should pass in 'EmptyCBView.as_view()' instead of
> 'EmptyCBView'
> }}}
New description:
We can detect early-on that the user has forgotten to call .as_view() on
their CBV when passing it into path(). For:
{{{
urlpatterns = [
path('home', HomeView)
]
}}}
The error currently happens only when you first load the route (rather
than when constructing the routes), and looks like
{{{
Internal Server Error: /
Traceback (most recent call last):
File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Angus\.virtualenvs\django-WBTbdxDv\lib\site-
packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
}}}
Which is especially hard to work out given that the traceback doesn't even
include any of the user's own code, and this is an error that's easy for
beginners to run into when first using CBVs.
My PR changes it to fail early, inside the call to django.urls.path(),
with a clear error:
{{{
URL route 'foo' should pass in 'EmptyCBView.as_view()' instead of
'EmptyCBView'
}}}
Pull request: https://github.com/django/django/pull/13682
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:1>
* needs_better_patch: 0 => 1
* stage: Unreviewed => Accepted
* type: Uncategorized => New feature
* needs_docs: 0 => 1
Comment:
I agree with the motivation here. As per comments on the PR, I think we
need to leverage the System check framework for this, rather than raising
runtime errors, but other than that +1.
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:2>
Comment (by Craig Smith):
Would it be worthwhile to change the error message for if the `name`
keyword argument is mistakenly passed as a positional argument? Currently
the message is:
{{{
ValueError: dictionary update sequence element #0 has length 1; 2 is
required
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:3>
* needs_better_patch: 1 => 0
* needs_docs: 1 => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:4>
* owner: nobody => Angus Holder
* needs_better_patch: 0 => 1
* ui_ux: 1 => 0
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:5>
* needs_better_patch: 1 => 0
Comment:
Author appears caught up on feedback.
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:6>
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:7>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"3e73c65ffcf263d5ccd107589452a4615281a0e8" 3e73c65]:
{{{
#!CommitTicketReference repository=""
revision="3e73c65ffcf263d5ccd107589452a4615281a0e8"
Fixed #32195 -- Added system check for invalid view in path() and improved
error messages.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:9>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"8f89454bbc873a117cc8614f2d1f1fbfd4e79ee4" 8f89454]:
{{{
#!CommitTicketReference repository=""
revision="8f89454bbc873a117cc8614f2d1f1fbfd4e79ee4"
Refs #32195 -- Added path() test for invalid view.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32195#comment:8>