Reputation: 115
html code
{% if request.user %}
<a href="{% url 'main:logout' %}">
Выход
</a>
{% else %}
<a href="{% url 'main:registration' %}">
Регистрация
</a>
{% endif%}
settings.py
LOGIN_REDIRECT_URL = 'main/index'
views.py
def logout(request):
logout(request)
urls.py
from django.conf.urls import url
from . import views
from django.conf import settings
urlpatterns = [
url(r'^logout/$', views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout')
]
what's wrong?
Upvotes: 11
Views: 39936
Reputation: 344
The following works on Django 4:
from django.urls import path
from django.contrib.auth.views import LogoutView
path("logout/", LogoutView.as_view(template_name="template_to_redirect.html"), name="logout")
Upvotes: 0
Reputation: 472
For Django 2.2.x or higher,
if you are using path
instead of url
, then simply import LogoutView
from django.contrib.auth.views
in urls.py
.
from django.contrib.auth.views import LogoutView
then add following path in urlpatterns
,
path("logout/", LogoutView.as_view(), name="logout"),
Note: You need to mention LOGOUT_REDIRECT_URL = "my_url"
in settings.py
for redirection after logout.
Upvotes: 6
Reputation: 229
Django 2.0 it looks like it switched to a class based view
from django.contrib.auth.views import LogoutView
url(r'^logout/$', LogoutView.as_view(), {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'),
Upvotes: 20
Reputation: 3793
For me, the url 'logout' was being used elsewhere, despite Django loudly complaining if I removed the 'logout' url from urls.py (I am using Django 1.11). I have no idea why/where/how. My hacky working solution was to use a different url, 'signout':
url(r'^signout/$', logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'),
Upvotes: 0
Reputation: 506
You are using your custom logout view which doesn't take next_page parameter. You should add it as parameter to your view and pass to django logout call, or just use django.contrib.auth.logout
e.g. in urls.py:
from django.conf.urls import url
from django.conf import settings
from django.contrib.auth.views import logout
urlpatterns = [
url(r'^logout/$', logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout')
]
Upvotes: 9
Reputation: 728
import django logout first , just write from django.contrib.auth import logout
at the top of your view file
Upvotes: 1