You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 2.2.4登录页TypeError:__init__()仅接受1个位置参数却传入2个

解决Django登录视图的TypeError: init() takes 1 positional argument but 2 were given

先来看你碰到的错误详情:

在路径/accounts/login处触发TypeError:init() takes 1 positional argument but 2 were given
请求方法:GET
请求URL:http://127.0.0.1:8000/accounts/login
Django版本:2.2.4
异常类型:TypeError
异常值:init()仅接受1个位置参数却传入2个
异常位置:E:\Python\lib\site-packages\django\core\handlers\base.py中_get_response方法,第113行

问题根源

你在项目路由里直接把auth_login(也就是LoginView类)当作视图传给了path,但Django的类视图必须通过调用as_view()方法才能转换成可处理请求的视图函数。当你直接传类的时候,Django会尝试实例化这个类并把request作为位置参数传入,可LoginView的__init__方法并不接受额外的位置参数,这就触发了这个TypeError。

顺带提一句,你的auth_logout(LogoutView类)也存在同样的问题,只是当前报错出在登录路由,后续访问登出功能也会触发类似错误。

修正后的路由代码

修改blogsite/blogsite/urls.py中的登录和登出路由,给类视图加上as_view()调用:

from django.contrib import admin
from django.urls import path,include
from django.contrib.auth.views import LoginView as auth_login
from django.contrib.auth.views import LogoutView as auth_logout

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('blog.urls')),
    # 给LoginView添加as_view()转换为可调用视图
    path('accounts/login/', auth_login.as_view(), name='login'),
    # 给LogoutView添加as_view(),同时保留kwargs参数
    path('accounts/logout/', auth_logout.as_view(), name='logout', kwargs={'next_page':'/'})
]

额外小提示

  1. 我给路由路径末尾加上了/,这符合Django的URL规范(默认APPEND_SLASH=True时,会自动重定向到带斜杠的URL),能避免不必要的重定向问题。
  2. 如果需要自定义登录页面模板,可以在as_view()里传入template_name参数,比如:auth_login.as_view(template_name='registration/login.html'),这样Django就会使用你指定的模板而非默认模板。

修改完成后,访问/accounts/login/就不会再触发TypeError了,登出功能也能正常运行。

内容的提问来源于stack exchange,提问作者Parekh Akhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:02:49