美文网首页
django 路由重定向(主页重定向方法)

django 路由重定向(主页重定向方法)

作者: 南土酱 | 来源:发表于2021-11-24 18:55 被阅读0次

当我想打开一个刚写好的 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

相关文章

网友评论

      本文标题:django 路由重定向(主页重定向方法)

      本文链接:https://www.haomeiwen.com/subject/pozntrtx.html