【问题标题】:Django render redirect to page with changing urlDjango 渲染重定向到带有更改 url 的页面
【发布时间】:2017-11-10 06:51:48
【问题描述】:

我正在为我的 django 应用程序创建自定义登录名,当我在模板上单击 logout 时出现问题,我对其进行了编程,因此它转到索引页面,但浏览器中的 url 仍然是 http://127.0.0.1:8000/logout/ 甚至到达索引页面。我希望它变成http://127.0.0.1:8000/。

views.py

def logout(request):
    try:
        del request.session['uid']
        return render(request, 'home.html')
    except:
        pass
    return render(request, 'home.html')

def home_page(request):
    return render(request, 'home.html')

模板

 <p>
    Publisher Dashboard, Welcome {{ user.name }}.
    <a href="{% url 'logout' %}" class="btn btn-primary">Logout</a>
</p>

urls.py

from django.conf.urls import url
from django.contrib import admin
from mainapp import views

urlpatterns = [
url(r'^$', views.home_page, name='homepage'),
url(r'^registration/$', views.signup_user, name='signup_user'),
....
url(r'^logout/$', views.logout, name='logout'),
]

【问题讨论】:

  • Django 有一个built in authentication system。如果可能的话,您应该使用它,而不是滚动您自己的使用 session['uid'] 的系统。

标签: python html django url web


【解决方案1】:

目前您正在呈现'home.html 模板,而不是将用户重定向到主页。

如果要重定向,则应返回 HttpResponseRedirect 响应,或使用 redirect 快​​捷方式。

from django.shortcuts import redirect

def logout(request):
    ...
    return redirect('/')

【讨论】:

  • 我可以使用redirect() 将views.py 中的一些值作为redirect('/', { 'user': user }) 发送到模板吗? @Alasdair
  • 没有。见this answer。
  • 感谢您的帮助。 @Alasdair
【解决方案2】:

Render 将提供一个新网页,但不会提供一个新 URL。

重定向会给出一个新的 URL。

所以在渲染的情况下,尽管会加载一个新的网页,但您的地址栏不会改变。 但如果是新 URL,您实际上会得到一个新 URL,因此该 URL 的新网页会更新地址栏。

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2010-12-25
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多