Django TypeError:__init__() 需要 1 个位置参数,但给出了 2 个

3 python django

这是来自的类代码views.py

class Ask(CreateView):
    template_name = 'f/ask.html'
    form_class = QuestionForm
    success_url = '/f/ask/'

    def get_context_data(self, **kwargs):
        content = super().get_context_data(**kwargs)
        return content
Run Code Online (Sandbox Code Playgroud)

这是我的 urls.py 代码

from django.urls import path, register_converter
from . import views, converter

register_converter(converter.HexConverter, 'hex')

urlpatterns = [
    path('', views.QuestionView),
    path('ask/', views.Ask),
    path('<hex:pk>/', views.QuestionCurrent, name='question_current'),
]
Run Code Online (Sandbox Code Playgroud)

它说__init__() takes 1 positional argument but 2 were given,但是我从书中取的代码,所以我不认为它是错误的或什么的。

Ann*_*Zen 5

添加.as_view()到您的路径中urls.py (因为它们是class基于路径)

从:

from django.urls import path, register_converter
from . import views, converter

register_converter(converter.HexConverter, 'hex')

urlpatterns = [
    path('', views.QuestionView),
    path('ask/', views.Ask),
    path('<hex:pk>/', views.QuestionCurrent, name='question_current'),
]
Run Code Online (Sandbox Code Playgroud)

到:

from django.urls import path, register_converter
from . import views, converter

register_converter(converter.HexConverter, 'hex')

urlpatterns = [
    path('', views.QuestionView.as_view()),
    path('ask/', views.Ask.as_view()),
    path('<hex:pk>/', views.QuestionCurrent.as_view(), name='question_current'),
]
Run Code Online (Sandbox Code Playgroud)

从文档:

classmethod as_view(**initkwargs)

返回一个接受请求并返回响应的可调用视图:

response = MyView.as_view()(request)

返回的视图具有 view_class 和view_initkwargs属性。

在请求/响应周期中调用视图时,该setup()方法会将 分配HttpRequest给视图的请求属性,并将从 URL 模式捕获的任何位置和/或关键字参数分别分配给 args 和 kwargs 属性。然后dispatch()被调用。