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单链表的简单实现方法
Sep 23 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python遍历数组的方法小结
Apr 30 Python
Python实现求一个集合所有子集的示例
May 04 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
Django框架实现的简单分页功能示例
Dec 04 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
Python爬虫新手入门之初学lxml库
Dec 20 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 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 定界符 使用技巧
2009/06/14 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
javascript 闭包
2011/09/15 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
专家推荐信模板
2014/05/09 职场文书
护士先进个人总结
2015/02/13 职场文书
高三数学教学反思
2016/02/18 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
Vue vee-validate插件的简单使用
2021/06/22 Vue.js