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获取远程文件大小的函数代码分享
May 13 Python
Python中的自定义函数学习笔记
Sep 23 Python
Python set集合类型操作总结
Nov 07 Python
Python装饰器基础详解
Mar 09 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
python 实现绘制整齐的表格
Nov 18 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Python 生成VOC格式的标签实例
Mar 10 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
python 爬取豆瓣网页的示例
Apr 13 Python
Python爬虫基础讲解之请求
May 13 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python中的Numpy入门教程
2014/04/26 Python
跟老齐学Python之永远强大的函数
2014/09/14 Python
python中pygame模块用法实例
2014/10/09 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python sorted方法和列表使用解析
2019/11/18 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
python实现简单文件读写函数
2021/02/25 Python
中国旅游网站:途牛旅游网
2019/09/29 全球购物
国际会议邀请函范文
2014/01/16 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
离婚被告答辩状
2015/05/22 职场文书
早上好问候语大全
2015/11/10 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
服务器间如何实现文件共享
2022/05/20 Servers