zoukankan      html  css  js  c++  java
  • 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>

    效果演示

  • 相关阅读:
    Delphi播放铃声
    小技巧
    Delphi线程中使用waitfor返回值
    window安装、启动consul
    kali2020-bash: openvas-setup:未找到命令 ,解决办法
    zookeeper 客户端
    redis 集群
    activeMQ
    Shiro
    Eclipse Java注释模板设置详解
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6218526.html
Copyright © 2011-2022 走看看