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 的 urls.py 中找不到,则将任何 url 重定向到 404.html