【问题标题】:django logout redirects me to administration pagedjango logout 将我重定向到管理页面
【发布时间】:2013-03-06 06:12:26
【问题描述】:

我提供了一个简单的登录功能。对于注销,我尝试使用内置的。这是我的 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 渲染哪个视图?

【问题讨论】:

标签: django logout


【解决方案1】:

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

【讨论】:

  • 这个答案如何回答“我如何通过注销 下一页属性 告诉 django 渲染哪个视图?”
  • 我不知道注销模板必须命名为logged_out.html。非常感谢,你已经结束了几乎一天的挠头:)
  • 哇。在阅读有关身份验证的信息时,我没有在文档中找到这一点。整洁
【解决方案2】:

在 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 上测试

urls.py 中附加到urlpatterns

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>

更多信息可以在here找到。

【讨论】:

  • 我不确定为什么 ppl 没有将此标记为正确答案!这对我有用!
  • 最简单的,就像一个魅力。如果您想注销而不需要为注销视图创建另一个模板,我建议您这样做。
【解决方案3】:

最简单的解决方案是:

  1. 确保您的应用django.contrib.admin 之前位于settings.py 中安装的应用下。

  2. 确保您的模板名为logged_out.html

【讨论】:

    【解决方案4】:

    根据文档,您可以将 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/'})
    

    【讨论】:

    • 结果是:Reverse for 'logout' with arguments '()' and keyword arguments '{}' not found.
    • 可能此注销在某个应用下,您还需要在该 url 中指定应用名称
    【解决方案5】:

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

    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/' %}
    

    【讨论】:

    • 我认为我可以使用内置的 django 注销视图并以某种方式对其进行参数化 - 这不会强迫我定义自己的自定义视图。
    • @tkoomzaaskz:这也是一个选项,这里解释:docs.djangoproject.com/en/dev/topics/auth/default/…
    • 然后我得到Reverse for 'logout' with arguments '()' and keyword arguments '{u'next': u'/some/url/'}' not found.。我不知道出了什么问题...我在 contrib 中使用 login 时遇到的错误相同...
    • 你能检查一下你运行的是哪个 Django 版本吗?另外,您如何/在哪里包含您的登录网址?
    【解决方案6】:

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

    url(r'^logout/$', 'django.contrib.auth.views.logout', { 'template_name': 'account/logout.html',}, name='logout' ),
    

    【讨论】:

    • 这个答案如何回答“我如何通过 logout next page 属性告诉 django 渲染哪个视图?”
    • 谢谢!这是对我有用的答案。指定模板名称修复了它,因此它不再切换到管理员注销。
    【解决方案7】:

    您可以将 LOGOUT_REDIRECT_URL 放在您的 settings.py 文件中,并带有一个要重定向到的 URL 名称,例如LOGOUT_REDIRECT_URL = 'index'

    【讨论】:

      【解决方案8】:

      转到 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
      

      【讨论】:

        【解决方案9】:

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

        LOGIN_REDIRECT_URL = '/go-here-after-login/'
        LOGOUT_REDIRECT_URL = '/go-here-after-logout/'
        

        【讨论】:

          【解决方案10】:

          最常见的解决方案总结:

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

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

          【讨论】:

            【解决方案11】:

            你也可以在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。

            【讨论】:

              【解决方案12】:

              这里只需替换loaders,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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-12-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-02-22
                • 2017-07-23
                • 2012-03-07
                • 2011-05-26
                相关资源
                最近更新 更多