使用用户身份验证创建登录页面并发生这种情况: 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)的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中进行身份验证后重定向

视图之间的Django身份验证

Laravel - 身份验证重定向到带有 302 找到代码的页面

Spring安全性重定向到经过身份验证的URL的登录页面

JSP 页面应如何检查身份验证

使用 Backbone Js 和 SLIM 框架进行用户身份验证