Python TypeError:login()得到一个意外的关键字参数';模板名称';
我将我的项目从Django 1.11升级到2.2,进行了所有更改,但出现了一个新错误,即login()得到了一个意外的关键字参数“template_name”。它与Django 1.11的早期版本配合得很好(所有其他URL都正常工作,只有登录页给出了错误)。我找不到任何关于这个问题的参考资料。下面是该问题的错误以及URL和视图Python TypeError:login()得到一个意外的关键字参数';模板名称';,python,django,Python,Django,我将我的项目从Django 1.11升级到2.2,进行了所有更改,但出现了一个新错误,即login()得到了一个意外的关键字参数“template_name”。它与Django 1.11的早期版本配合得很好(所有其他URL都正常工作,只有登录页给出了错误)。我找不到任何关于这个问题的参考资料。下面是该问题的错误以及URL和视图 Internal Server Error: / Traceback (most recent call last): File "C:\Users\User\ven
Internal Server Error: /
Traceback (most recent call last):
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\PycharmProjects\MyWebsite\landing\views.py", line 43, in landing_validation
login_response = login(request, template_name='landing.html')
TypeError: login() got an unexpected keyword argument 'template_name'
[19/Apr/2019 16:20:00] "GET / HTTP/1.1" 500 71948
url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')
登录\url.py
from django.conf.urls import url
from landing.views import landing_validation
app_name='landing'
urlpatterns = [
url(r'^$', landing_validation, name='landing')
]
Landing\views.py
from django.contrib.auth import login
def landing_validation(request):
login_response = login(request, template_name='landing.html')
return login_response
C:\Users\User\venv\Lib\site packages\django\contrib\auth\uuuuu init\uuuuuuu.py
def login(request, user, backend=None):
"""
Persist a user id and a backend in the request. This way a user doesn't
have to reauthenticate on every request. Note that data set during
the anonymous session is retained when the user logs in.
"""
session_auth_hash = ''
if user is None:
user = request.user
if hasattr(user, 'get_session_auth_hash'):
session_auth_hash = user.get_session_auth_hash()
if SESSION_KEY in request.session:
if _get_user_session_key(request) != user.pk or (
session_auth_hash and
not constant_time_compare(request.session.get(HASH_SESSION_KEY, ''), session_auth_hash)):
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
request.session.flush()
else:
request.session.cycle_key()
try:
backend = backend or user.backend
except AttributeError:
backends = _get_backends(return_tuples=True)
if len(backends) == 1:
_, backend = backends[0]
else:
raise ValueError(
'You have multiple authentication backends configured and '
'therefore must provide the `backend` argument or set the '
'`backend` attribute on the user.'
)
else:
if not isinstance(backend, str):
raise TypeError('backend must be a dotted import path string (got %r).' % backend)
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = backend
request.session[HASH_SESSION_KEY] = session_auth_hash
if hasattr(request, 'user'):
request.user = user
rotate_token(request)
user_logged_in.send(sender=user.__class__, request=request, user=user)
您可以看到django.contrib.auth.login接受请求、用户和可选后端。没有模板名称。这一点最近没有改变,所以我认为在1.11中也会遇到同样的问题
看起来您需要一个视图函数,但django.contrib.auth.login不是这样。它不会返回响应。您使用的
登录
功能实际上不是视图。它只是一个常规函数,您可以使用它来验证用户身份并设置会话cookie等
请阅读文档了解其用法:
根据您的代码判断,您似乎想要使用它
没有必要进行着陆确认查看,这一行解决了问题
Internal Server Error: /
Traceback (most recent call last):
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\PycharmProjects\MyWebsite\landing\views.py", line 43, in landing_validation
login_response = login(request, template_name='landing.html')
TypeError: login() got an unexpected keyword argument 'template_name'
[19/Apr/2019 16:20:00] "GET / HTTP/1.1" 500 71948
url(r'^$', LoginView.as_view(template_name='landing.html'), name='landing')
在Django 2.2应用程序中,我通过使用
LoginView
而不是login
修复了类似错误
文件users/url.py:
这让我摆脱了模板名称的问题,但我现在遇到了新的问题。TemplateDoesNotExist at/registration/login.html请求方法:获取请求URL:Django版本:2.2异常类型:TemplateDoesNotExist异常值:registration/login.html
没有名为“Django.contrib.auth.views.auth_views”的模块django.contrib.auth.views不是一个包
@用户感谢您指出这一点。它应该是来自django.contrib.auth.views import LoginView的。我也更新了我的答案。