Django 渲染重定向到带有更改 url 的页面

Posted

技术标签:

【中文标题】Django 渲染重定向到带有更改 url 的页面【英文标题】:Django render redirect to page with changing 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'] 的系统。 【参考方案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 的新网页会更新地址栏。

【讨论】:

以上是关于Django 渲染重定向到带有更改 url 的页面的主要内容,如果未能解决你的问题,请参考以下文章

django 将“/”重定向到平面页面

如何在 Django 中重定向(包括 URL 更改)?

反应路由器 dom 重定向问题。更改 url,不渲染组件

如果在 django 的 urls.py 中找不到,则将任何 url 重定向到 404.html

如果 url 模式不匹配,Django 如何重定向到 404 页面

如何使用自定义 django 404 错误视图重定向?