Django学习系列之路由系统
一、基于App的路由
作用:
根据App对路由规则进行分类,在全局urls.py包含某个项目的urls.py
示例
定义全局urls.py(全局路由系统)
#导入include
from django.conf.urls import url,include
from django.contrib import admin
#导入app下的view函数
from learn import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^helloapp/',include('cmdb/urls')) #使用APP cmdb下的urls规则
]
定义一个项目的urls.py(项目的路由系统)
from django.conf.urls import url,include
from django.contrib import admin
#导入app下的view函数
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',views.login),
url(r'^index/',views.index),
url(r'^reg/',views.reg),
url(r'^layout/',views.layout),
]
定义views.py(视图函数)
from django.shortcuts import render,HttpResponse
def index(request):
# return HttpResponse('<h1>hello world!!!</h1>')
return render(request,'index.html')
def login(request):
return HttpResponse('login')
def reg(request):
return HttpResponse('reg')
def layout(request):
return HttpResponse('layout')
访问测试
http://127.0.0.1:8000/cmdb/admin/
http://127.0.0.1:8000/cmdb/layout/
http://127.0.0.1:8000/cmdb/login/
http://127.0.0.1:8000/cmdb/reg/
http://127.0.0.1:8000/cmdb/index/
二、动态路由(传一个参数)
作用
可以用来做分页,比如说访问一个博客网址:www.cnblogs.com/zhaijunming/1显示第1-10篇博客,访问www.cnblogs.com/zhaijunming/2显示第2-20篇博客
示例一:简单的说明动态路由
定义urls.py(路由系统)
from django.conf.urls import url
from django.contrib import admin
from learn import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/(\d+)/', views.home),
#正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组,每一个子组将作为一个参数,被 views.py 中的对应视图函数接收
]
定义views.py(视图函数)
from django.shortcuts import render,HttpResponse
# Create your views here.
def home(request,num): #如果加正则表达式传参数的话,这里必须得有一个形式参数用来接收
print(num)
return HttpResponse(num)
测试
http://127.0.0.1:8000/home/2
2
http://127.0.0.1:8000/home/1
1
示例二:利用路由系统的动态参数功能做分页
定义urls.py
from django.conf.urls import url
from django.contrib import admin
from cmdb import views
urlpatterns = [
url(r'^index/(\d+)/', views.index),
url(r'^detail/(\d+)/', views.detail),
]
定义views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
#定义一个空列表,存放用户信息
USER_LIST = []
#模拟生成94条用户信息, 如: id:1,username:alex1,email:alex1
for item in range(94):
temp = {'id':item,'username':'alex'+str(item),'email':'alex'+str(item)}
USER_LIST.append(temp) #分页显示选项的函数
def index(request,page):
page = int(page)
start = (page - 1 ) * 10 #假如用户输入127.0.0.1/index/5,这里就是40
end = page * 10 #这里就是50
user_list = USER_LIST[start:end] #列表的切片功能,获取列表里索引为40-50的内容
return render(request,'index.html',{'user_list':user_list}) #把获取到列表里索引为40-50的内容传到模板中 #显示某个选项的所有信息
def detail(request,nid):
nid = int(nid) #假如用户输入127.0.0.1/detail/5, 这里的nid就是5
current_detail_dict = USER_LIST[nid] #找到列表里索引为5的值
return render(request,'detail.html',{'current_detail_dict':current_detail_dict}) #把获取到索引为5的值传到模板
定义index.html模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table> <tr>
<td>ID</td>
<td>用户名</td>
<td>详细信息</td>
</tr> {% for item in user_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.username }}</td><td><a href="/detail/{{ item.id }}">查看详细</a></td> {#点击查看详细就跳转到类似于/datail/5的页面#}
</tr>
{% endfor %} </table>
</body>
</html>
定义detail.html模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{# 比如获取到列表里索引为5的值,那就是这样的{'id':5,'username':alex5,'email':alex5}#}
{# 因为视图函数里是列表嵌套字典:[{'id':1,'username':alex1,'email':alex1},{'id':2,'username':alex2,'email':alex2}]#}
<ul>
<li>
{{ current_detail_dict.id }}
</li>
<li>
{{ current_detail_dict.username }}
</li>
<li>
{{ current_detail_dict.email }}
</li>
</ul>
</body>
</html>
效果演示

Django学习系列之路由系统的更多相关文章
- Django学习之 - 基础路由系统
路由系统:URL 1:一个URL对应一个类或函数: url(r'^register',reg.register) 函数写法 url(r'^cbv',reg.cbv.as_view()) 类写法 2:通 ...
- Django学习系列之模板系统
一.模板标签 if/else {% if %}标签检查一个变量的值是否为真或者等于另外一个值,如果为真,系统会执行{% if %}和{% endif %}之间的代码块,例如: {% if ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- Django框架——基础之路由系统(urls.py)
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
- Django框架——基础之路由系统(urls.py)11111111
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
- Django(二)路由系统、视图、模板
大纲 一.内容概要: 二.上节回顾 三.Django 视图–views 1.获取用户多个数据及文件上传 2.FBV 和 CBV 3.装饰器 四.Django模板补充 - Django模板语言循 ...
- python django基础二URL路由系统
URL配置 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数 ...
- django目录下的路由系统和视图函数
一.Django路由系统(url) 1.什么是路由系统 路由系统的本质是URL模式以及要为该URL模式调用的视图函数之间的一个映射表即不同的url路径对应的不同的函数,该路由系统是存放在全局配置文件u ...
随机推荐
- iTOP-6818开发板-Android4.4系统下RFID射频模块测试例程
平台:迅为iTOP-6818开发板 系统:Android4.4版本 例程:RFID射频模块测试例程 rc522 驱动在 Android 系统的内核是默认集成的,用户可以在开发板上使用命令“ls /de ...
- arch - 显示机器的体系结构
总览 (SYNOPSIS) arch 描述 (DESCRIPTION) arch 等同于 uname -m. 目前的 Linux 系统上, arch 显示 的 数据 有 "i386" ...
- ANALYZE - 收集与数据库有关的统计
SYNOPSIS ANALYZE [ VERBOSE ] [ table [ (column [, ...] ) ] ] DESCRIPTION 描述 ANALYZE 收集有关 PostgreSQL ...
- cesium 原理 之 command拼接
VAO VAO(Vertext Array Object),中文是顶点数组对象.之前在<Buffer>一文中,我们介绍了Cesium如何创建VBO的过程,而VAO可以简单的认为是基于VBO ...
- 判断Exe(DLL)和符号文件是否匹配---验证模块和符号文件是否匹配的工具和方法
当我们进行程序调试时,有时调试器会直接告诉你符号文件不对,或则显示出的调用栈不对,当你怀疑符号文件不匹配时,如何确定呢? 如果是用windbg调试,请用 !chksym 模块名比如,匹配的时候 不匹 ...
- JavaSE-23 注解
学习要点 注解的概念 注解分类 读取注解信息 注解概述 1 元数据 定义 描述数据的数据. 用处 文档编制.编译器检查.代码分析等 2 Java注解 Annotation in JDK5.0——将 ...
- Centos下PHP7.1打开Oracle扩展
背景 最近因为项目研究了一下PHP集成Oracle,虽然这个组合很奇葩,但万一用到请勿采坑~ 环境 CentOS Linux release 7.3.1611 (Core) PHP7.1.1 安装or ...
- Java线程和多线程(一)——线程的基本概念
Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...
- Mvc Action可以通过jsonp方式调取
jsonp其实是一种特殊的数据获取格式,所以在Aicton直接调取的时候肯定会出现问题,下面代码是对于jsonp调取做的处理 protected virtual ActionResult Create ...
- JavaEE JDBC 补充注意点
JDBC补充注意点 @author ixenos 1.一个Statement对象可以用于多个不相关的命令和查询,但是一个Statement对象最多只能有一个打开的结果集,如果需要同时执行多个查询同时分 ...