使用用户身份验证创建一个登录页面,这发生了:raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)



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/uls.py

from django.urls import path,include
from . import views
urlpatterns = [   
path('login_user', views.login_user,name='login_user'),   
]

MYapp/uls.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
  1. 在视图中,将正确的模板路径传递到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' %}

最新更新