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编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 Python
Python编写单元测试代码实例
Sep 10 Python
python实现过滤敏感词
May 08 Python
变长双向rnn的正确使用姿势教学
May 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笔记之:AOP的应用
2013/04/24 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JsRender for object语法简介
2014/10/31 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
致裁判员加油稿
2014/02/08 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
节约用水标语
2014/06/11 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
2014年质量工作总结
2014/11/22 职场文书
《海上日出》教学反思
2016/02/23 职场文书
八年级语文教学反思
2016/03/03 职场文书
Python制作动态字符画的源码
2021/08/04 Python