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的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
django如何连接已存在数据的数据库
Aug 14 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
python实现录屏功能(亲测好用)
Mar 02 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
Python tkinter实现日期选择器
Feb 22 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 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的宝库目录--PEAR
2006/10/09 PHP
用libTemplate实现静态网页的生成
2006/10/09 PHP
smtp邮件发送一例
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
PHP开发负载均衡指南
2010/07/17 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python实现微信自动回复机器人功能
2019/07/11 Python
Python pandas库中的isnull()详解
2019/12/26 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
创建文明学校实施方案
2014/03/11 职场文书
中国入世承诺
2014/04/01 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
雨中的树观后感
2015/06/03 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js