当我想打开一个刚写好的 django项目主页的时候,
😂我想输入一个 http://ip:port/ 或者一个不存在的URL时候就自动跳转到主页 /index 怎么办呢?🥟🥟
两种方法,有重定向的和利用技巧的
第一种,urls 重定向
重定向又分两种,
1. 一种 是写在 views 视图进行转发的
2. 另一种是 直接 urls 路由进行转发的
urls 转发有两个函数可以使用!!!
from django.views.generic.simple import redirect_to
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^$', redirect_to, {'url': '/index/'}),
url(r'^$',RedirectView.as_view(url='/index')),
例如:
path('index/',XXXXXX)
)
两者参数内容一致,具体不同本文章不细讲。
1.1 r'^$',是通配符,不管你输入什么地址,只要匹配不到别的路由地址都会通过这个
1.2第三个参数的填写规则是 首个 / 一定要加上。
1.3 当匹配不到已存在的地址时候就会跳转到 index 这个路径
image.png
在 url()函数中的第三个参数的填写规范是:
如上图所示,如果只有 index/ 就请填写 '/index/'
但是如果像我一样有多层的路由的
/index/admin 的 就写 '/index/admin/'
多重的以此类推
tips: 貌似 redirect_to 在 3.x 版本被抛弃掉了,导入的时候报错
本人未测试,用的是RedirectView 。需要的自己测试
image.png
第二种 views 的方法
1. from django.http import HttpResponseRedirect
利用 return HttpResponseRedirect("/path/") (地址规则与 urls的一致)
tips:HttpReponseDirect只支持hard coded urls(硬编码链接),
2. from django.shortcuts import redirect
redirect('/index/') (同上)
or
redirect('https://www.baidu.com/')(别的网页)
tips: HttpResponseRedirect能支持的URL重定向,redirect都支持。
但是 redirect真正NB的地方在于,可以根据对象Object重定向和根据视图view重定向
2.1 obj = MyModel.objects.get(...)
return redirect(obj)
2.2 return redirect('some-view-name', valueName='value')
3. from django.urls import reverse
redirect(reverse('blog:article_detail', args=[str(self.pk), self.slug]))
此处 reverse 与 redirect 并用
tips: reverse方法的作用是对已命名的URL进行反向解析,
还传递相应的参数(args或带key的参数kargs)
3.1 因为最上边两种方法无法使用已经命名url ,所以提供这个函数来对 命名URL解析
举个例子:
背后的逻辑是 reverse('index:index)='/index/admin'
代码如下图:
image.png
image.png
网友评论