#django #django-forms #django-views #logout
#django #django-forms #django-просмотры #Выход
Вопрос:
Получил следующую ошибку при нажатии кнопки выхода из системы с кодом внизу-
Ошибка значения при выходе из системы view app.views.logout не вернул объект HttpResponse. Вместо этого он вернул None. Метод запроса: GET
URL запроса:http://127.0.0.1:8000/logout
Версия Django: 3.0.8
Тип исключения: ошибка значения Значение исключения:
Просмотр app.views.logout не вернул объект HttpResponse. Вместо этого он вернул None.
мой код
def logout(request):
if request.method=="POST":
auth.logout(request)
return redirect('login')
мой html
<li class="nav-item mr-3">
<form id="logout" method="POST">
{% csrf_token %}
<input type ="hidden">
</form>
<a class="nav-link" href="{% url 'logout'%}" onclick="javacript:document.getElementById('logout').submit()">
Logout
</a>
</li>
Комментарии:
1. очевидно, что у вас есть <a> тег с href внутри формы, который запускается вместо формы
2. Какую версию Django вы используете?
Ответ №1:
В вашем коде
def logout(request):
if request.method=="POST":
auth.logout(request)
return redirect('login')
Нет необходимости в явном, redirect
поскольку auth.logout
может обрабатывать перенаправление после выхода из системы. Просто установите LOGOUT_REDIRECT_URL = "my_url"
в settings.py
В качестве альтернативы, то же самое можно достичь и в urls.py
, если вы используете Django 2.2.x или выше, в urls.py
импорте
from django.contrib.auth.views import LogoutView
затем добавьте следующий путь в urlpatterns,
path('logout/', LogoutView.as_view(next_page=settings.LOGOUT_REDIRECT_URL), name='logout'),
Тогда вам не нужен никакой код в вашем views.py