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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
给Python初学者的一些编程技巧
Apr 03 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
Python切片工具pillow用法示例
Mar 30 Python
Python高级用法总结
May 26 Python
Python查看微信撤回消息代码
Jun 07 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 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
基于文本的访客签到簿
2006/10/09 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python3 replace()函数使用方法
2018/03/19 Python
django ORM之values和annotate使用详解
2020/05/19 Python
python mysql中in参数化说明
2020/06/05 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
新兵入伍心得体会
2014/09/04 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
公司员工管理制度
2015/08/04 职场文书
2019销售早会主持词
2019/06/27 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
python blinker 信号库
2022/05/04 Python
windows系统安装配置nginx环境
2022/06/28 Servers