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学习系列之路由系统的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维Python系列之Django路由系统Ajax请求

Django学习系列之模板系统

django之路由系统

django之路由系统

Django之路由系统

Django之路由系统