Django学习系列之路由系统
Posted 差点点温柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习系列之路由系统的主要内容,如果未能解决你的问题,请参考以下文章