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中3种内建数据结构:列表、元组和字典
Nov 30 Python
Python字符串逐字符或逐词反转方法
May 21 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
python版大富翁源代码分享
Nov 19 Python
python实现诗歌游戏(类继承)
Feb 26 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
python安装requests库的实例代码
Jun 25 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
python 中[0]*2与0*2的区别说明
May 10 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
CentOS安装php v8js教程
2015/02/26 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
layui表格实现代码
2017/05/20 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Django实现网页分页功能
2019/10/31 Python
执行Python程序时模块报错问题
2020/03/26 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
中职应届生会计求职信
2013/10/23 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
食品质检员岗位职责
2015/04/08 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS