使用用户身份验证创建登录页面并发生这种情况: raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)
Posted
技术标签:
【中文标题】使用用户身份验证创建登录页面并发生这种情况: raise TemplateDoesNotExist(\', \'.join(template_name_list), chain=chain)【英文标题】:Creating a login page with user Authentication & this happened : raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)使用用户身份验证创建登录页面并发生这种情况: raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain) 【发布时间】:2022-01-18 19:03:19 【问题描述】:Django 中的新功能。学习如何使用用户身份验证创建登录页面。一切正常,但是当我输入错误的密码来检查循环是否正常工作时。知道错误是由于url分配错误,但不明白如何解决。
我正在使用两个应用程序,一个用于登录(name=trevalo_app),另一个用于所有应用程序(name=MYapp)
trevalo_app/views.py
from django.shortcuts import render,redirect
from django.http import *
from django.contrib.auth import authenticate,login,logout
from django.contrib import messages
from .models import *
def login_user(request):
if request.method=='POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('index')
else:
messages.success(request,('There was an error in logining. Please Try again...'))
return redirect('login')
else:
return render(request,'login_user.html',)
MYapp/index.html
<body>
% include 'MYapp/navebar.html' %
<center>
<h1>name</h1>
</center>
<div class="cotainer">
% if messages %
% for message in messages %
message
% endfor %
% endif %
</div>
% block content %% endblock content %
% include 'MYapp/footer.html' %
</body>
trevalo_app/urls.py
from django.urls import path,include
from . import views
urlpatterns = [
path('login_user', views.login_user,name='login_user'),
]
MYapp/urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('footer', views.footer, name='footer'),
path('navebar', views.navebar, name='navebar'),
]
trevalo_app/login_user.html
% extends 'MYapp/index.html' %
% block content %
<center>
<h3>login...</h3>
<hr>
</center>
<div class="container container-fluid ">
<form method=POST action="">
% csrf_token %
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label"> username</label>
<input type="text" name='username' class="form-control"
placeholder="username" aria-describedby="emailHelp">
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Password</label>
<input type="password" name='password' class="form-control" placeholder="password">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
% endblock %
【问题讨论】:
【参考方案1】:您的模板存在一些问题:
-
在您的应用程序中为模板使用正确的目录结构,以便 Django 知道在哪里可以找到它们:
/ MYapp
- urls.py
- views.py
- ...
/ templates
/ MYapp
- index.html
/ trevalo_app
- urls.py
- views.py
- ...
/ templates
/ trevalo_app
- login_user.html
-
在您的视图中,将正确的模板路径传递给
render
:
def login_user(request):
if request.method=='POST':
...
else:
return render(request,'trevalo_app/login_user.html', ) # The correct template path
请注意,您的代码失败是因为您在 trevalo_app/login_user.html
模板中扩展了 'MYapp/index.html'
。为此,您必须遵循 Django 推荐的目录结构,以便它可以找到正确的模板。
% extends 'MYapp/index.html' %
【讨论】:
以上是关于使用用户身份验证创建登录页面并发生这种情况: raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)的主要内容,如果未能解决你的问题,请参考以下文章