zoukankan      html  css  js  c++  java
  • Django--母版

    在之前的两个小程序中,可以发现在写html页面的时候有很多重复的代码

    而在python中,为了避免写重复代码,我们通过函数、模块或者类来进行实现,所以在Django里面也有这样的功能,帮我们把html基本母版页面变成可继承的,相当于python中写了基类

    母版

    母版就是在我们写的项目中,html页面总是会有一部分是固定不变的,我们可以把这部分抽取出来,变成一个母版,然后在母版中通过占位符进行占位,子版在继承母版后就可以在占位符中进行添加内容

    语法

    1. 母版
    # layout.html
    
    写三个占位符:
    a. 内容占位符 
    {% block mycontent %}
    
    {% endblock %}
    
    b. css占位符
    {% block mycss %}
    
    {% endblock %}
    
    c. js占位符
    {% block myjs %}
    
    {% endblock %}
    
    1. 子版
    继承母版页面:
    {%extends 'layout.html'%}
    
    {% block mycontent %}
    	写自己的内容
    {% endblock %}
    

    案例

    # 母版  layout.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>学生管理系统</title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .body {
                position: fixed;
                top: 0;
                right: 0;
                left: 0;
                bottom: 0;
                background: url("/static/img/5b73957e18ee0.jpg") no-repeat -20px -100px;
                background-size: 1300px;
            }
    
            .head {
                margin-top: 20px;
                margin-left: 20px;
            }
    
            .title {
                color: floralwhite;
                font-size: 40px;
                font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
            }
    
            .body-nav {
                position: absolute;
                 250px;
                height: 600px;
                background-color: black;
                opacity: 0.6;
                text-align: center;
            }
    
            .main {
                position: absolute;
                left: 250px;
                right: 0;
                height: 600px;
                background-color: lightgrey;
                opacity: 0.8;
                padding: 20px;
            }
    
            li a {
                color: white;
            }
    
        </style>
    
        <style>
    
            .shadow {
                position: fixed;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                background-color: black;
                opacity: 0.4;
                display: none;
            }
    
            .add_model, .update_model {
                position: fixed;
                height: 300px;
                 500px;
                left: 500px;
                top: 100px;
                background-color: white;
                display: none;
                border-radius: 10px;
                }
    
            .model {
                margin-top: 10px;
                margin-left: 40px;
            }
    
            .model input {
                height: 34px;
                 203px;
                padding: 6px 12px;
                border: 1px solid #ccc;
                border-radius: 4px;
                background-color: #fff;
            }
        </style>
    
        {% block mycss %}
    
        {% endblock %}
    </head>
    <body>
    <div class="body">
        <div class="head">
            <h1 class="title">学生管理系统</h1>
        </div>
        <div class="body-nav">
            <ul class="nav nav-pills nav-stacked">
                <li style="margin-top: 30px;"><a href="/classes/">班级管理</a></li>
                <li><a href="/students/">学生管理</a></li>
                <li><a href="/teachers/">老师管理</a></li>
            </ul>
        </div>
        <div class="main">
            {% block mycontent %}
    
            {% endblock %}
        </div>
    </div>
    {#CDN导入jQuery#}
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    
    {% block myjs %}
    
    {% endblock %}
    </body>
    </html>
    
    # 以clsses页面为例
    
    # 继承母版
    {% extends 'layout.html' %}
    
    # 添加classes.html 独有的css内容
    {% block mycss %}
        <style>
            select {
                height: 34px;
                 203px;
                padding: 6px 12px;
                border: 1px solid #ccc;
                border-radius: 4px;
                background-color: #fff;
            }
        </style>
    {% endblock %}
    
    # 添加classes.html 内容
    {% block mycontent %}
        <h3>学生表</h3>
        <table class="table table-hover table-bordered">
            <tbody>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>班级</th>
                <th>更新</th>
                <th>删除</th>
            </tr>
            {% for stu in students %}
                <tr>
                    <td>{{ stu.sid }}</td>
                    <td>{{ stu.name }}</td>
                    <td>{{ stu.age }}</td>
                    <td clsid="{{ stu.cid }}">{{ stu.cname }}</td>
                    <td>
                        <button class="btn btn-info"><a href="/update_student/?id={{ stu.sid }}"
                                                        style="color: white;text-decoration: none;">更新</a></button>
                        <button class="ajax_update btn btn-primary">ajax更新</button>
                    </td>
                    <td>
                        <button class="btn btn-danger"><a href="/del_student/?id={{ stu.sid }}" class="delete"
                                                          style="color: white;text-decoration: none;">删除</a></button>
                        {#                <button class="ajax_delete">ajax删除</button>#}
                    </td>
                </tr>
            {% endfor %}
    
            </tbody>
        </table>
        <br><br>
        <button class="btn btn-info"><a href="/add_student/" style="color: white;text-decoration: none;">添加学生</a></button>
        <button id="ajax_add" class="btn btn-primary">ajax添加学生</button>
    
        {# 遮罩层 #}
        <div class="shadow"></div>
    
        {# 弹出框层 #}
        {# 增加学生 #}
        <div class="add_model">
            {#    <input type="hidden" name="class_id">#}
            <div>
                <h4 style="text-align: center; margin-top: 20px;">增加学生</h4>
                <hr>
            </div>
            <div class="model" style="margin-left: 120px">
                名字:<input type="text" name="name" id="add_student"><br>
                年龄:<input type="text" name="age" id="add_age"><br>
                <div style="margin-top: 2px;margin-bottom: 2px">
                    班级:<select name="add_cid" id="add_cid">
                    {% for class in classes %}
                        <option value="{{ class.id }}">{{ class.cname }}</option>
                    {% endfor %}
                </select></div>
                <span id="add_error" style="color:red; font-size: 12px; margin-bottom: 10px;"></span><br>
                <button id="add" class="btn btn-danger" style="margin-left: 48px;">添加</button>
                <button class="add_cancel btn btn-primary" style="margin-left: 40px;">取消</button>
            </div>
        </div>
    
        {# 更新学生 #}
        <div class="update_model">
            <div>
                <h4 style="text-align: center; margin-top: 20px;">更新学生</h4>
                <hr>
            </div>
            <div class="model" style="margin-left: 120px">
                <input type="hidden" name="sid" id="up_sid">
                姓名:<input type="text" name="name" id="up_name"><br>
                年龄:<input type="text" name="age" id="up_age">
                <div style="margin-top: 2px;margin-bottom: 2px">
                    班级:<select name="up_cid" id="up_cid">
                    {% for class in classes %}
                        <option value="{{ class.id }}">{{ class.cname }}</option>
                    {% endfor %}
                </select>
                </div>
                <span id="up_error" style="color:red; font-size: 12px; margin-bottom: 10px;"></span><br>
                <button id="update" class="btn btn-danger" style="margin-left: 48px;">更新</button>
                <button class="up_cancel btn btn-primary" style="margin-left: 48px;">取消</button>
            </div>
        </div>
    {% endblock %}
    
    
    # 添加classes.html 独有的js内容
    {% block myjs %}
        {# 删除学生 #}
        <script>
            $('.delete').click(function () {
                res = window.confirm('是否删除学生');
                return res;
            });
        </script>
    
        {# 增加学生 #}
        <script>
            $('#ajax_add').click(function () {
                $('.shadow, .add_model').css('display', 'block');
            });
    
            $('.add_cancel').click(function () {
                $('.shadow, .add_model').hide();
                window.location.href = '/students/'
            });
    
            $('#add').click(function () {
                var name = $('#add_student').val();
                var age = $('#add_age').val();
                var cid = $('#add_cid').val();
                $.ajax({
                    type: 'POST',
                    url: '/ajax_add_student/',
                    data: {'name': name, 'age': age, 'cid': cid},
                    success: function (data) {
                        var res = JSON.parse(data);
    
                        if (res['code'] == 10000) {
                            alert(res['msg']);
                            window.location.href = '/students/';
                        } else {
                            $('#add_error').text(res['msg']);
                        }
                    }
                })
            });
    
        </script>
    
        {# 更新学生 #}
        <script>
            $('.ajax_update').click(function () {
                $('.shadow, .update_model').show();
                var info = $(this).parent().prevAll();
                var age = info[1].innerText;
                var name = info[2].innerText;
                var id = info[3].innerText;
                var cid = $(info[0]).attr('clsid');
    
                $('#up_age').val(age);
                $('#up_name').val(name);
                $('#up_sid').val(id);
                $('#up_cid').val(cid);
            });
    
            $('.up_cancel').click(function () {
                $('.shadow, .update_model').hide();
                window.location.href = '/students/';
            });
    
            $('#update').click(function () {
                var name = $('#up_name').val();
                var age = $('#up_age').val();
                var id = $('#up_sid').val();
                var cid = $('#up_cid').val();
    
                $.ajax({
                    type: 'POST',
                    url: '/ajax_update_student/',
                    data: {'id': id, 'name': name, 'age': age, 'cid': cid},
                    success: function (data) {
                        var res = JSON.parse(data);
                        if (res['code'] == 10000) {
                            alert(res['msg']);
                            window.location.href = '/students/';
                        } else {
                            $('#up_error').text(res['msg']);
                        }
                    }
                })
            });
    
        </script>
    {% endblock %}
    
  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/Hades123/p/11366294.html
Copyright © 2011-2022 走看看