【问题标题】:Django TypeError : __init__() takes 1 positional argument but 2 were givenDjango TypeError:__init__() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2026-01-14 09:40:01
【问题描述】:

这是来自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

这是我的 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'),
]

上面写着__init__() takes 1 positional argument but 2 were given,但那段代码是我从书上拿来的,所以我不认为这是错误的。

【问题讨论】:

  • ……以及完整的错误回溯!
  • 可能是你使用的django的book版本和django的版本,或者其他库发生了变化。这不是一个不常见的问题。错误是否指向这个register_converter
  • 不,它没有指向 register_converter

标签: python django


【解决方案1】:

.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'),
]

收件人:

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'),
]

来自文档:

classmethod as_view(**initkwargs)

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

response = MyView.as_view()(request)

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

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

【讨论】: