python - 请求/响应中间件中的 Django 错误-TypeError: __init__() 采用 1 个位置参数,但给出了 2 个
问题描述
我对 Django 还是很陌生,似乎无法解决这个错误(我在这里阅读了类似的帖子,但没有运气)。urls.py 中的代码粘贴在下面:
from django.conf.urls import include, url
from django.contrib import admin
# Add this import
from django.contrib.auth import views
from log.forms import LoginForm
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(('dashboard.urls', "dashboard"), namespace='dashboard')),
url(r'^login/$', views.LoginView, {'template_name': 'login.html', 'authentication_form': LoginForm}, name='login'),
url(r'^logout/$', views.LogoutView, {'next_page': '/'}),
]
完整跟踪如下:
Internal Server Error: /login/
Traceback (most recent call last):
File "C:\Python36-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Python36-32\lib\site-packages\django\core\handlers\base.py", line 127, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python36-32\lib\site-packages\django\core\handlers\base.py", line 125, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
[21/Aug/2018 00:20:27] "GET /login/?next=/ HTTP/1.1" 500 64213
关于如何解决这个问题的任何想法?或者什么可能导致这个错误?
解决方案
简而言之:您需要使用.as_view()
将基于类的视图“转换”为可以在urls.py
.
[ LoginView
Django-doc]和LogoutView
[Django-doc]是基于类的视图,为了使这些在 中可调用urls.py
,您需要使用as_view
:
from django.conf.urls import include, url
from django.contrib import admin
# Add this import
from django.contrib.auth import views
from log.forms import LoginForm
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(('dashboard.urls', "dashboard"), namespace='dashboard')),
url(r'^login/$', views.LoginView.as_view(), {'template_name': 'login.html', 'authentication_form': LoginForm}, name='login'),
url(r'^logout/$', views.LogoutView.as_view(), {'next_page': '/'}),
]
基于类的视图包含充当包装器的此类函数,并且每次都初始化一个实例。如果您LoginView
直接使用,您将调用该类的构造函数LoginView
。虽然有一些额外的逻辑,可以返回 a ,但它不是很优雅(当你构造 a 时你HttpResponse
不会期望 a ),而且它会使视图子类化(这是为什么这样的类的原因之一 -基于视图可以节省很多工作)非常繁琐。HttpResponse
LoginView
推荐阅读
- tensorflow - keras.callbacks.Tensorboard 在 Tensorflow 急切执行中不起作用
- javascript - 在加载时调用多个指令并单击一个指令
- odoo-10 - Odoo 10 Pos:无法读取卡
- reactjs - 怎么做
标签的行为类似于 react-native 中的 HTML 内联元素 - react-native - 从 BottomTabBar 中获取 SafeAreaView 的高度
- node.js - TypeError:无法在反应中读取 null 的属性“名称”
- javascript - 如何使用上一个和下一个按钮遍历锚链接?
- python - 似乎无法从 celery 任务中修改缓存值
- python - random.choice 中的奇怪行为
- c# - CheckListBox 为每个