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模拟登陆Tom邮箱示例分享
Jan 13 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python之eval()函数危险性浅析
Jul 03 Python
python删除列表内容
Aug 04 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
详解python字节码
Feb 07 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
pymysql模块的操作实例
Dec 17 Python
Python 使用生成器代替线程的方法
Aug 04 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
Python实现扫码工具的示例代码
Oct 09 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 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
python3生成随机数实例
2014/10/20 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python实现复制大量文件功能
2019/08/31 Python
python中什么是面向对象
2020/06/11 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
德育标兵事迹材料
2014/08/24 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Python基础 括号()[]{}的详解
2021/11/07 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
vue router 动态路由清除方式
2022/05/25 Vue.js