当前位置: 首页 > news >正文

【Django】开发日报_3.2_Day:模板继承

目录

模板继承

(1)编写HTML模板

(2)使用模板继承

(3)用法须知

定义模板:

继承模板:


模板继承

        在处理部门表的时候,每个操作页面都用到了相同的导航栏,当时我们的做法是 一 一 拷贝,如果说,我们想要修改一下导航栏上的内容,那么就要 一 一 修改,如果页面过多,显然这是非常麻烦的一件事。

        因此,为了解决这种代码复用的问题,我们引入Django中模板继承机制,来方便我们编写程序。

(1)编写HTML模板

将页面重复的部分都写在模板里,不同的部分用

{% block content %}
……
{% endblock %}

替代:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-default">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">联通用户管理系统</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/depart/list">部门管理</a></li>
                <li><a href="/depart/list">Link</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">代码骑士 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>
<!--列表-->
<div>
    {% block content %}{% endblock %}
</div>
<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>

举例:

原来的depart_list.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
    <style>
        .navbar {
            border-radius: 0;
        }
    </style>
</head>
<body>
<!--导航-->
<nav class="navbar navbar-default">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">联通用户管理系统</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/depart/list">部门管理</a></li>
                <li><a href="/depart/list">Link</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">代码骑士 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>
<!--列表-->
<div>
    <div class="container">
        <!--按钮-->
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/depart/add/">
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建部门
            </a>
        </div>
        <!--表格面板-->
        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                部门列表
            </div>
            <!-- Table -->
            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in qureyset %}
                    <tr>
                        <th>{{ obj.id }}</th>
                        <td>{{ obj.title }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/depart/{{ obj.id }}/edit/">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{ obj.id }}">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>

(2)使用模板继承

语法:

{% extends 'layout.html' %}
{% block content %}
……
{% endblock %}

现在的depart_list.html

{% extends 'layout.html' %}
{% block content %}
<div>
    <div class="container">
        <!--按钮-->
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/depart/add/">
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建部门
            </a>
        </div>
        <!--表格面板-->
        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                部门列表
            </div>
            <!-- Table -->
            <table class="table table-bordered">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in qureyset %}
                    <tr>
                        <th>{{ obj.id }}</th>
                        <td>{{ obj.title }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/depart/{{ obj.id }}/edit/">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{ obj.id }}">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
{% endblock %}

可以看到,省略了将近一半的代码量,而且功能不变。

接下来就可以用这种办法作用于其他页面了。

(3)用法须知

模板中的block模块是可以定义多个的,哪里不同,就在哪里添加block,这样就可以避免一些代码冗余了。示例如下:

定义模板:

继承模板:

 

 通俗来讲,模板继承可以灵活运用block区域,其余代码区属于共有财产。

相关文章:

  • 探索原味BFF模式
  • unity初学 Mstudio教程
  • Complete Partition Of Array
  • 单节点k8s—自签名证书—四层负载均衡—helm安装rancher
  • 高频面试题:谈谈你对 Spring Boot 自动装配机制的理解
  • Apple Xcode 14 (14A309) 正式版发布(含下载)
  • mysql 执行计划 type详解
  • Java进阶篇之泛型
  • 发送post请求渲染el-table,并实现搜索和分页功能
  • [RK3568 Android11] 时间同步机制
  • 6、Mybatis-Plus wrapper的使用
  • 基于Web的爬虫系统设计与实现
  • Kubernets---配置 Pod 使用投射卷作存储
  • springcloud和分布式微服务学习笔记
  • 【“在路上”疫情信息检测】
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • flutter的key在widget list的作用以及必要性
  • Git初体验
  • Git同步原始仓库到Fork仓库中
  • Gradle 5.0 正式版发布
  • HTML-表单
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java正则表式的使用
  • Kibana配置logstash,报表一体化
  • Laravel核心解读--Facades
  • nfs客户端进程变D,延伸linux的lock
  • PHP 7 修改了什么呢 -- 2
  • PHP变量
  • Spring核心 Bean的高级装配
  • vue 配置sass、scss全局变量
  • Vue.js 移动端适配之 vw 解决方案
  • 第十八天-企业应用架构模式-基本模式
  • 二维平面内的碰撞检测【一】
  • 分享一份非常强势的Android面试题
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 马上搞懂 GeoJSON
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 用Visual Studio开发以太坊智能合约
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • # Apache SeaTunnel 究竟是什么?
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • ${factoryList }后面有空格不影响
  • (4)(4.6) Triducer
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (LeetCode) T14. Longest Common Prefix
  • (pytorch进阶之路)扩散概率模型
  • (Ruby)Ubuntu12.04安装Rails环境
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot掌上博客系统 毕业设计063131