Создание страницы входа в систему с аутентификацией пользователя и вот что произошло : 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/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 %}
Есть несколько проблем с вашими шаблонами:
- Используйте правильную структуру каталогов для шаблонов в ваших приложениях, чтобы 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' %}