41

我提供了一个简单的登录功能。对于注销,我尝试使用内置的。这是我的 urls.py:

(r'', include('django.contrib.auth.urls')),

这是我的模板文件:

{% if user.is_authenticated %}
logged in as {{ user }}
(<a href="{% url "logout" %}">logout</a>)
{% else %}

我还启用了默认的 django 管理站点。当我单击logout时,它会显示管理注销视图。如何通过 logout next page 属性告诉 django 要呈现哪个视图?

4

12 回答 12

69

如果您看到的是 Django 管理站点的注销页面而不是您自己的注销页面 (your_application/templates/registration/logged_out.html),请检查项目的 INSTALLED_APPS 设置并确保 django.contrib.admin 出现在后面'你的申请'。两个模板都位于相同的相对路径中,Django 模板加载器将使用它找到的第一个。

于 2015-12-11T00:09:30.063 回答
21

在 Django 1.6 上测试:

我所做的是将它添加到我的urls.py

(r'^management/logout/$', 'django.contrib.auth.views.logout'),

然后使用它:

<a href="{% url "django.contrib.auth.views.logout" %}?next=/">Log out</a>

对于next参数,您指向正确的 URL。

在 Django 2.1 上测试

附加urlpatternsurls.py

from django.contrib.auth import views as auth_views

urlpatterns = [
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

然后在模板中使用它:

<a href="{% url "logout" %}?next=/">logout</a>

更多信息可以在这里找到。

于 2015-02-20T13:19:16.490 回答
11

根据文档,您可以将 next_page 参数提供给注销视图。 https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.logout

(r'^logout/$', 'django.contrib.auth.views.logout',
    {'next_page': '/logged_out/'})
于 2013-03-18T02:55:24.737 回答
11

最简单的解决方案是:

  1. 确保您的应用位于已安装的应用之前django.contrib.adminsettings.py

  2. 确保您的模板被称为logged_out.html.

于 2017-09-11T15:53:26.390 回答
4

这在手册中都有很好的解释,你有什么不明白的地方吗?

https://docs.djangoproject.com/en/dev/topics/auth/default/#how-to-log-a-user-out

from django.contrib.auth import logout

def logout_view(request):
    logout(request)
    # Redirect to a success page.

或者,如果您不想创建自己的视图

https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

{% url 'logout' next='/some/url/' %}
于 2013-03-18T00:04:54.413 回答
4

我在 Django 之后遇到了同样的问题……发现这个 url 对我有用

url(r'^logout/$', 'django.contrib.auth.views.logout', { 'template_name': 'account/logout.html',}, name='logout' ),
于 2016-05-21T16:25:11.117 回答
4

您可以LOGOUT_REDIRECT_URLsettings.py文件中放入要重定向到的 url 名称,例如LOGOUT_REDIRECT_URL = 'index'

于 2019-03-12T09:29:38.447 回答
3

转到 settings.py 并添加此代码。“/”会将您重定向到主页

# Where to redirect during authentication
LOGIN_REDIRECT_URL = "/" #To go to home after login instead of getting redirected to accounts/profile on login which is default
LOGOUT_REDIRECT_URL = "/" #To logout back to the home page instead of the default admin logout page
于 2019-12-13T23:48:21.087 回答
2

我很惊讶没有人提到这一点,你可以把它放在你的 settings.py 中,以便在登录和注销时重定向:

LOGIN_REDIRECT_URL = '/go-here-after-login/'
LOGOUT_REDIRECT_URL = '/go-here-after-logout/'
于 2019-04-23T08:30:59.050 回答
1

最常见的解决方案总结:

确保 your_app 在 settings.py 文件的 INSTALLED_APPS 列表中位于 django.contrib.admin 之前。

还要确保您的注销页面称为“logged_out.html”,如上面的答案中所指出的那样。我的被​​称为 logout.html 并没有工作。

于 2020-07-04T14:12:37.660 回答
1

您也可以在 href 标记中提供要呈现的模板

{% if user.is_authenticated %}

  logged in as {{ user }}
  (<a href="{% url "logout" %}?next=myapp/templates/logoutmessage.html">logout</a>)

{% else %}
  ...
{% endif %}

如果您使用 settings.py 中的默认值。适用于 Django 3.1。

于 2021-03-12T15:44:30.860 回答
0

只需在此处替换 loader,auth 模板将在“your_progect_apps/templates/registration”中找到:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
        'loaders': [
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',
        ],
    },
},

]

Django v2.1

于 2018-09-14T04:37:45.683 回答