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实现的数据结构与算法之基本搜索详解
Apr 22 Python
Windows下python2.7.8安装图文教程
May 26 Python
Python字符串处理实现单词反转
Jun 14 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
简单了解Python write writelines区别
Feb 27 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Python读取yaml文件的详细教程
Jul 21 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
Python爬虫实战之爬取携程评论
Jun 02 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
Terran魔法科技
2020/03/14 星际争霸
php 冒泡排序 交换排序法
2011/05/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
python实现批量改文件名称的方法
2015/05/25 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
诉讼代理人授权委托书
2014/04/08 职场文书
低碳生活倡议书
2014/04/14 职场文书
酒店节能减排方案
2014/05/26 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
基于Python实现股票收益率分析
2022/04/02 Python