#python #django #django-views #django-forms #django-templates
#python #django #django-представления #django-forms #django-шаблоны
Вопрос:
Сегодня у меня возникла эта проблема:
Я написал отдельное веб-приложение для входа в систему с помощью платформы Django.
Когда пользователь входит в систему, он перенаправляется на страницу индекса. Там он может видеть «сообщения» других пользователей и имеет возможность поставить лайк «сообщению». При нажатии кнопки «Мне нравится» пользователь выходит из системы, а просмотр «Мне нравится» вообще не доступен. Может кто-нибудь сказать мне, почему это так?
Я приведу некоторый код ниже. Если этого недостаточно, вот мои проекты на github: https://github.com/palm-octo-chainsaw/the-end
главная url.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls', namespace='core')),
path('accounts/', include('accounts.urls', namespace='accounts_app')),
path('djrichtextfield/', include('djrichtextfield.urls')),
]
core.views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login
from core.models import Core
from django.contrib.auth.models import User
def home(req):
ctx = {
'posts': Core.objects.all(),
}
return render(req, 'pages/index.html', ctx)
@login_required(login_url='accounts_app:login')
def likes(req):
if req.method == 'POST':
if req.user:
return redirect('core:home')
def create(req):
pass
core.urls.py
from django.urls import path, include
from core.views import home, likes, create
app_name = 'core'
urlpatterns = [
path('', home, name='home'),
path('like/', likes, name='like'),
path('create/', create, name='create')
]
accounts.views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout
from accounts.forms import RegisterUserForm, LoginForm
def sign_up(req):
if req.method == 'POST':
form = RegisterUserForm(req.POST)
if form.is_valid():
user = form.save()
login(req, user)
return redirect('core:home')
elif req.method == 'GET':
form = RegisterUserForm()
ctx = {
'form': form
}
return render(req, 'registration/sign_up.html', ctx)
def login_view(req):
if req.method == 'POST':
form = LoginForm(data=req.POST)
if form.is_valid():
user = form.get_user()
login(req, user)
return redirect('core:home')
elif req.method == 'GET':
form = LoginForm()
ctx = {
'form': form
}
return render(req, 'registration/login.html', ctx)
def logout_view(req):
if req.method == 'POST':
print(' ')
print(req)
logout(req)
return redirect('accounts_app:login')
accounts.urls.py
from django.contrib import admin
from django.urls import path
from accounts.views import sign_up, logout_view, login_view
app_name = 'accounts_app'
urlpatterns = [
path('sign_up/', sign_up, name='sign-up'),
path('login/', login_view, name='login'),
path('logout/', logout_view, name='logout')
]
шаблон:
{% include "pages/base.html" %}
{% block content %}
{% if user.is_authenticated %}
{% for post in posts %}
<main role="main" class="container">
<div class="jumbotron">
<h1>{{ post.username }}</h1>
<h4>{{ post.content|safe }}</h4>
<form action="{% url 'core:like' %}" method="POST">
{% csrf_token %}
<button class="btn btn-primary">{{ post.likes }}</button>
</form>
</div>
</main>
{% endfor %}
{% endif %}
{% endblock content %}
панель навигации:
<nav class="navbar navbar-expand-sm bg-dark navbar-dark mb-4">
<div class="navbar-collapse collapse justify-content-between">
<ul class="navbar-nav mg-auto">
<li class="nav-item active">
<a class="navbar-brand ml-4" href="{% url 'core:home' %}">
<h2>YASM</h2>
</a>
</li>
</ul>
<ul class="navbar-nav mg-auto">
<li class="nav-item">
<h3>Welcome {{ user }} to YASM!</h3>
</li>
</ul>
<ul class="navbar-nav mg-auto">
<li>
<a href="{% url 'core:create' %}">Create</a>
</li>
<li class="nav-item dropdown">
<div class="text-center">
<a class="nav-item active navbar-brand" href="#" id="navbarDropdownMenuLink">
<h3>{{ user.username }}</h3>
</a>
</div>
<div class="dropdown-menu dropdown-menu-right text-center" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<form action="{% url 'accounts_app:logout' %}" method="POST">
{% csrf_token %}
<input class="dropdown-item" type='submit' value="Logout" />
</div>
</li>
</ul>
</div>
</nav>
Если вам нужна дополнительная информация, напишите ниже или проверьте предоставленный github.
Заранее благодарим вас за помощь! 🙂
Комментарии:
1. Можете ли вы поделиться кодом шаблона, в котором размещена кнопка «Мне нравится»?
2. Я только что отредактировал вопрос. Извините за неудобства.
Ответ №1:
Закрывающий тег формы отсутствует в вашей панели навигации, что приводит к тому, что форма выхода из системы распространяется до тех пор, пока не найдет следующий </form>
тег.
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<div class="navbar-collapse collapse justify-content-between">
<ul class="navbar-nav mg-auto">
<li class="nav-item active">
<a class="navbar-brand ml-4" href="{% url 'core:home' %}">YASM</a>
</li>
</ul>
<ul class="navbar-nav mg-auto">
<li class="nav-item dropdown">
<div class="text-center">
<a class="nav-item active navbar-brand" href="#" id="navbarDropdownMenuLink">{{ user|upper }}</a>
</div>
<div class="dropdown-menu dropdown-menu-right text-center" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<form action="{% url 'accounts_app:logout' %}" method="POST">
{% csrf_token %}
<input class="dropdown-item" type='submit' value="Logout" />
</form> <--- Missing tag
</div>
</li>
</ul>
</div>
</nav>
Комментарии:
1. @K.Г. Вы рискуете, что ваш комментарий будет помечен как грубый из-за неуместного языка.