Django登录页报错:__init__()仅接受1个位置参数但传入2个
解决Django登录页面的TypeError: init() takes 1 positional argument but 2 were given问题
嘿,我看到你跟着《Python Crash Course》开发Learning Log应用时,访问登录页面碰到了这个TypeError错误。别慌,这个问题其实是类视图的使用方式不对导致的,咱们分分钟就能搞定它。
问题根源
在你的urls.py里,你直接把LoginView类传给了url()函数,但Django的类视图不能这么直接用——它需要通过.as_view()方法转换成可调用的视图函数。如果直接传递类本身,Django会尝试实例化这个类,而你传入的{'template_name':'users/login.html'}参数会被当成位置参数传给__init__方法,这就触发了参数不匹配的错误。
修复后的urls.py代码
把LoginView改成LoginView.as_view()就可以解决问题,修改后的代码如下:
from django.conf.urls import url # Importing the default login view provided by Django from django.contrib.auth.views import LoginView from .import views app_name = 'users' urlpatterns =[ # Login page url(r'^login/$', LoginView.as_view(template_name='users/login.html'), name='login'), ]
补充说明
我检查了你的login.html和base.html代码,逻辑都是没问题的。只要修复urls里类视图的调用方式,登录页面就能正常加载,你可以继续推进后续的功能开发啦。
内容的提问来源于stack exchange,提问作者Ayush Hiremani
相关产品推荐
相关产品推荐

