Django 反向生成url实例详解


Posted in Python onJuly 30, 2019

Django中提供了一个关于URL的映射的解决方案,

1.客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示

2.通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL

第一个就是平常的请求有URLconf来解析的过程,

第二个叫做,url的逆向解析,url逆向匹配,url的逆向查阅,等

Django提供了不同的层级的url逆向处理工具:

1.在模板templates中,使用url标记,如:{% url %}

2.在Python代码中,使用django.core.urlresolvers.reverse()方法

3.在更高一层级的处理url中,用get_absolute_url()方法

新建一个项目diango

访问longin页面跳转到 index页面

app01 views.py

from django.shortcuts import render,redirect,HttpResponse
def index(request):
  return HttpResponse('Index')
def login(request):
  return HttpResponse('longin')

urls.py

from django.conf.urls import url
from app01 import views

urlpatterns = [
  url(r'^index/', views.index),
  url(r'^login/', views.login),

]

在平常做法

views.py

views.py

def login(request):
  return redirect('/index/')

如果usr 很长

urlpatterns = [
  url(r'^index/xxxxx/xxx/xxx/xxx/xx/', views.index),
  url(r'^login/', views.login),
]

可以用平常做法:

app01 views.py

def login(request):
  return redirect('/index/xxxxx/xxx/xxx/xxx/xx/')

这种方法看上去不是那么的友好, 我们用usl 别名的方式

导入reverse

app01/views.py

from django.urls import reverse
def login(request):
  url = ('inx')
  return redirect(url)

urls.py

urlpatterns = [
  url(r'^index/xxxxx/xxx/xxx/xxx/xx/', views.index,name='inx'),
]

通过 usl名称,反向生成usl

include方法来实现路由转发功能

urls.py

url(r'^cmdb/', include'(crm.urls)'),

crm/urls.py

from django.conf.urls import url,include
from django.contrib import admin
from crm import views
urlpatterns = [
  url(r'^hosts/', views.hosts,name='hosts'),
]

crm/views.py

def hosts(request):
  return HttpResponse('主机列表')

通过这个cmdb前缀分发,分发到自己的urls中,好处可以将各种的业务拆分

反向生成时,使用reverse(‘namespace:name')

新建app, monitor 、openstack ,

url(r'^monitor/', include('monitor.urls',namespace='m')),
url(r'^openstack/', include('openstack.urls',namespace='o')),

monitor/ulrs.py

from django.conf.urls import url,include
from django.contrib import admin
from monitor import views
urlpatterns = [
  url(r'^hosts/', views.hosts,name='hosts'),
]

monitor/views.py

from django.shortcuts import render,HttpResponse
def hosts(request):
  return HttpResponse('监控系统,主机列表')

openstack /ulrs.py

from django.conf.urls import url,include
from django.contrib import admin
from openstack import views
urlpatterns = [
  url(r'^hosts/', views.hosts,name='hosts'),
]

openstack /views.py

from django.shortcuts import render,HttpResponse
def hosts(request):
  return HttpResponse('OpenStack,主机列表')

登录成功时跳转到 openstack/主机列表页面

def login(request):
  return HttpResponse('Login')
  # 跳转到 openstack主机列表页面
  # return redirect('/openstack/hosts/')
  url = reverse('o:hosts')

include本质 【就是元组,一级一级做分发】

urls.py

from monitor import views as mviews
from openstack import views as oviews
  # /monitor/hosts/
  url(r'^login/', views.login),
    url(r'^monitor/', ([
                url(r'^hosts/',mviews.hosts,name='hhhhh'),
                url(r'^c1/',mviews.hosts),
                url(r'^x1/', ([
                        url(r'^xxx1/',mviews.hosts),
                        url(r'^xxx2/',mviews.hosts,name='xx2'),
                        url(r'^xxx3/',mviews.hosts),
                        url(r'^xxx4/',mviews.hosts),
                      ],None,None)),
                url(r'^c2/',mviews.hosts),
                url(r'^c3/',mviews.hosts),
              ],None,'mm')),
    url(r'^openstack/', ([
                url(r'^hosts/',oviews.hosts,name='hhhhh'),
                url(r'^c1/',oviews.hosts),
                url(r'^c2/',oviews.hosts),
                url(r'^c3/',oviews.hosts),
              ],None,'oo')),
]

views.py

# 跳转到 openstack主机列表页面
   url = reverse('oo:hhhhh')
   url = reverse('mm:uu:xx2')

动态生成url

views.py

def login(request):
  return HttpResponse('Login')

urls.py

urlpatterns = [
  url(r'^login/', views.login),
]
for i in range(10):
  temp = []
  for j in range(5):
    temp.append(url(r'^inner_%s/' % j, views.login))
  v = url(r'^login_%s/' %i, (temp,None,None))
  urlpatterns.append(v)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用xmlrpc实例讲解
Dec 17 Python
Python多线程爬虫简单示例
Mar 04 Python
一文总结学习Python的14张思维导图
Oct 17 Python
微信跳一跳自动运行python脚本
Jan 08 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python定时任务sched模块用法示例
Jul 16 Python
python求绝对值的三种方法小结
Dec 04 Python
新手学python应该下哪个版本
Jun 11 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
python help函数实例用法
Dec 06 Python
如何用python绘制雷达图
Apr 24 Python
Python中的嵌套循环详情
Mar 23 Python
Python Pandas数据中对时间的操作
Jul 30 #Python
python tkinter实现彩球碰撞屏保
Jul 30 #Python
详解python pandas 分组统计的方法
Jul 30 #Python
python文档字符串(函数使用说明)使用详解
Jul 30 #Python
python3.6 tkinter实现屏保小程序
Jul 30 #Python
简单了解python变量的作用域
Jul 30 #Python
学习和使用python的13个理由
Jul 30 #Python
You might like
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
IE6 fixed的完美解决方案
2011/03/31 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
JavaScript中的函数模式详解
2015/02/11 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue 指定组件缓存实例详解
2018/04/01 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
详解Python中的各种函数的使用
2015/05/24 Python
利用Python爬取可用的代理IP
2016/08/18 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
介绍Java的内部类
2012/10/27 面试题
高中生学习生活的自我评价
2013/11/27 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
排查整治工作方案
2014/06/09 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers