7.Django中页面重定向的使用 && path()中参数name的讲解

Posted 孤寒者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.Django中页面重定向的使用 && path()中参数name的讲解相关的知识,希望对你有一定的参考价值。

引子:
  讲一个每个人都碰到过的情形:我们在页面中登录QQ空间的时候,登录成功后会跳转到你的QQ空间主页。
    这就是本文要讲的内容——页面重定向!

第一部分:Django实战使用——页面重定向

1.项目目录下的urls.py文件:

from django.contrib import admin
from django.urls import path,re_path,include                 #include用来分配的
from . import views

urlpatterns = [     #主路由:只用来分配
    path('admin/', admin.site.urls),
    path('', views.index),                                  #首页
    path('music/', include("music.urls")),
]   

2.项目目录下的views.py文件:

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):  
    return HttpResponse("这里是首页")

3.App music里面的urls.py文件:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [     #子路由
    path("test01/",views.test01),
]

4.App music里面的views.py文件:

from django.shortcuts import render,redirect        #redirect是重定向;
from django.http import HttpResponse
import time
# Create your views here.

def test01(request):
    print("登录成功")           
    time.sleep(3)
    return redirect("/")        #如果登录成功,返回到首页!     !做了路由跳转=====重定向!

5.如果现在在本地浏览器输入127.0.0.1:8000/music/test01,那么效果是等待3S后页面自动跳转到首页中!

现在有个问题是:如果某个url地址被多次重定向,那么当这个地址名发生改变时,就会引起一个很可怕的连锁反应——我们要接连更改所有重定向到此地址的代码。想想都恐怖——所以path()中提供了一个name参数帮助我们解决这个难题!!!

第二部分:拓展——path()中name参数的使用

name参数可以给这个URL地址取一个合适的名字。通过给url取名字,以后在视图函数或者模板中使用这个URL,就只需要通过这个名字就可以使用。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

1.项目目录下的urls.py文件:

from django.contrib import admin
from django.urls import path,re_path,include                 #include用来分配的
from . import views

urlpatterns = [     #主路由:只用来分配
    path('admin/', admin.site.urls),
    path('music/', include("music.urls")),
]

2.App music里面的urls.py文件:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [     #子路由
    path("test01/",views.test01),
    path("sing/",views.sing,{"name":"小明","age":18},name="bb"),       # 这里就对此条path使用了参数name!

]

3.App music里面的views.py文件:

from django.shortcuts import render,redirect,reverse        #redirect是重定向,reverse是将url的name解析成url的函数
from django.http import HttpResponse
import time
# Create your views here.

#音乐app下面的视图函数
def sing(request,**kwargs):
    name=kwargs.get("name")
    age=kwargs.get("age")
    return HttpResponse("{}太帅了,年龄是{}".format(name,age))

#登录页
def test01(request):
    print("登录成功")
    time.sleep(3)
    #下面两者作用一模一样:
    # return redirect("/music/sing")    #跳转到唱歌页面
    return redirect(reverse("bb"))      #reverse可以将当前这个bb解析为它所对应的url地址,    即:/music/sing
    #解决无论url的地址如何改变,只要它的name属性不变这些关于他的重定向都可以正常执行!

4.在本地浏览器中输入:127.0.0.1:8000/music/test01,等待3S会跳转到唱歌页面。显示:小明太帅了,年龄是18

以上是关于7.Django中页面重定向的使用 && path()中参数name的讲解的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用绑定表单重定向到另一个视图

从其他页面重定向到#tag 部分

如何在 JSF 2.0 中重定向

如何在GET URL上重定向页面

Vue Router 重定向&别名

重定向到新页面时如何使 <li> 保持突出显示?