zoukankan      html  css  js  c++  java
  • Django之模板系统

    前言

    来看一段代码

    def current_datetime(request):
        now = datetime.datetime.now()
        html = "<html><body>It is now %s.</body></html>" % now
        return HttpResponse(html)

    直接把HTML页面嵌套在视图函数里返回给浏览器并不是一个好主意;

    原因:

    1、对页面设计进行的任何改变都必须对 Python 代码进行相应的修改,牵一发而动全身;

    2、Python 代码编写和 HTML 设计是两项不同的工作,前端开发和后端开发无非 并行;

    基于这些原因,将HTML页面的设计和后端逻辑设计分离,会更简洁、容易维护开发我们的WEB应用。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。   

    模板是什么?                                

    Django自带的模板语言=  HTML代码+逻辑控制代码,注意 模板 != HTML,模块 =HTML代码+逻辑控制代码(特殊标记);

    模板作用?

    在server端 把后端的变量 嵌入到HTML中渲染后,返回给浏览器来达到前后端代码分离,页面动态显示的目的;

     

    一、Django模板语言应用:

    Django模板语言的语法主要分为2种: {{变量}}    和   {%  Tag %} ,{{变量 }}主要用于和视图变量做替换,{% tag %}主要用于做逻辑判断和实现某些功能,正因有了数据+逻辑才构成了模板语言;

    1.1、使用双大括号引用视图中的变量

    语法:{{ 变量}} ,列表取值:{{列表}}. 索引, 字典取值:{{字典}}.键

                       <td>{{ forloop.counter }}</td>
                        <td>{{ book.title }}</td>
                        <td>{{ book.price }}</td>
                        <td>{{ book.date}}</td>
                        <td>{{ book.publish}}</td>
                        <td>{{ book.author }}</td>
    View Code

    ** {{ forloop.counter }} 渲染循环的次数

    View Code

    1.2:内置变量过滤器的使用

    如果引用得视图变量,不能直接渲染使用,可以借助fifter进行数据的二次处理,就像Python中的内置函数

    语法:{{ 变量|fifter:参数 }}

    过滤器列表:

    1. add:给变量加上相应的值、
    2. addslashes :单引号加上转义号,一般用于输出到javascript中
    3. capfirst :第一个字母大写
    4. {{ "123spam456spam789"|cut:"spam" }}查找删除指定的字符串
    5. {{ l1|slice:":2" }} 列表切边
    6. {{ t|date:'Y-m-d' }} 转换特定时间格式
    7. {{ s|default:'空空如也' }} 值不存在,使用指定值
    8. {{ info|truncatechars:18 }} 渲染指定长度的字符
    9. {{ info1|truncatewords:9 }}渲染指定长度的单词
    10. {{ a|safe }} 声明安全可以渲染
    11. {% if forloop.counter|divisibleby:2 %} 整除

    实例

    视图

    from django.shortcuts import render
    import datetime
    def fifters(request):
        i=10
        w="A'B'C'D'E"
        f='china'
        t=datetime.datetime.now()
        s=''
        l1=[98890,765,9870,7654]
        info='嘲笑我吧你们这些毫无眼光的人,我必将引来雷霆万钧的力量,摧古拉朽得战胜一切敌人!'
        info1='You laugh at me without the vision of people, and I will lead to an irresistible force power, corruption must defeat all enemies destroy gura!'
        li=['a','b','c','d','e','f','g']
        str1='{{hello world}}'
        a='<a href="黄色网址">点击我</a>'
        fhjsaldfhjsdfhlasdfhljsdal='hellow  world'
        return render(request,'modals.html',locals())
    View Code

    模板

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>模板渲染</title>
    </head>
    <body>
    
     <p>{{ i|add:200 }}</p>
     <p>{{ w|addslashes}}</p>
     <p>{{ f|capfirst }}</p>
    <p>{{ "123spam456spam789"|cut:"spam" }}</p>
      <p>{{ t|date:'Y-m-d'  }}</p>
      <p>{{ l1|slice:":2" }}</p>
     <p>{{ s|default:'空空如也' }}</p>
     <p>{{ info|truncatechars:18 }}</p>
      <p>{{ info1|truncatewords:9 }}</p>
      <p>
      {% csrf_token%}
      {% for foo in li %}
          <li>{{ forloop.counter0 }}----->{{ foo }}</li>
      {% empty  %}
          <li>没有符合的对象</li>
      {% endfor %}
    
     </p>
     <p>
      {% verbatim %}
      {{ str1 }}
      {% endverbatim %}
     </p>
    
    
      <p>
          {% with total=fhjsaldfhjsdfhlasdfhljsdal %}
          {{ total }}
          {% endwith %}
      </p>
    
      <p>{{ a|safe }}</p>
    </body>
    </html>
    
    更多参考:豆瓣:https://www.douban.com/note/145065606/,袁浩:http://www.cnblogs.com/sss4/p/7071183.html
    View Code

    2.1、内置标签(tag)的使用

    如果引用到了视图中的变量,还不足以渲染出一个完美的页面,那就要借助tag标签,做逻辑控制和功能完善了;

    语法格式: {% tags %}

    {% for %}  {% endfor %}   for循环

    {% for row in list %}
           </tr>
              <td>{{ row.id }}</td>
              <td>{{ row.name }}</td>
              <td>{{ row.title }}</td>
              <td><a href="#" onclick="show_modal(this)">添加</a></td>
              <td id="del_s"><a href="#" onclick="modal_del(this)">删除</a> </td>
              <td><a href="#"onclick="modal_edit(this)">编辑</a></td>
             </tr>
    
         {% endfor %}
    View Code


    {% if %}{% endfor %} if判断

    <select name="class_id" id="">
             {% for row in dict %}
                 {% if row.id == name1.class_id %}
                    <option selected value="{{ row.id }}">{{ row.title}}</option>
                 {%else%}
                     <option value="{{ row.id }}">{{ row.title}}</option>
                 {%endif%}
             {% endfor %}
         </select>
    View Code


    {% if row.id in cids%}  
    in 成员关系判断

     <p>任教课程:
                <select name="class_id" multiple size="5">
                    {% for row in clas %}
                        {% if row.id in cids%}
                                <option selected value={{ row.id}}>{{ row.title}}</option>
                        {%else%}
                                 <option value={{ row.id}}>{{ row.title}}</option>
                        {% endif %}
                    {% endfor %}
                </select>
             </p>
    View Code

     

    {% empty %}   没有渲染到数据,提示。

     {% for foo in li %}
          <li>{{ forloop.counter0 }}----->{{ foo }}</li>
      {% empty  %}
          <li>没有符合的对象</li>
      {% endfor %}
    View Code

    {% verbatim %}{% endverbatim %} 禁止渲染

    视图
    str1='{{hello world}}'
    模板
      {% verbatim %}
      {{ str1 }}
      {% endverbatim %}
    View Code

    {% csrf_token %}

    用于生成csrf_token的标签,用于防治跨站攻击验证(csrf)。 其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。

    {% url %}  引用路由分配系统配置的 path 别名

    <form action="{% url "bieming"%}" >
              <input type="text">
              <input type="submit"value="提交">
              {%csrf_token%}
    </form>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <p>{{args}}</p>
    <p>{% url "zhangge" i i1%}</p>
    </body>
    </html>
    View Code

    {% with %} {% endwith %}  用更简单的变量名 替代视图复杂的变量名

    fhjsaldfhjsdfhlasdfhljsdal='hellow  world'
    
    把后端复杂的变量名,转换得更加简单;
    <p>
          {% with total=fhjsaldfhjsdfhlasdfhljsdal %}
          {{ total }}
          {% endwith %}
      </p>
    View Code

     

    在标签里添加reversed来反序循环列表

      {% for log in logs reversed %}
                            {% if forloop.counter|divisibleby:2 %}
                                <dl>
                                    <dd class="pos-right clearfix">
                                        <div class="circ"></div> <!--圆圈-->
                                        <div class="time"><p>{{ log.update_time }}</p></div> <!--时间-->
    
                                        <div class="events">
                                            <div class="events-header">
                                                <p>{{ log.details }}</p>
                                            </div>
    
                                            <div class="events-footer">
                                                <span>{{ log.verbose_content }}</span>
                                            </div>
                                        </div>    <!--内容 -->
    
                                    </dd>
    
                                </dl> <!--通过设置class="pos-方向clearfix" -->
                            {% else %}
    View Code

    二、自定义fifter和simp-tag

    模板语言自带的tag和过滤器,在某些情况下还不能满足我的功能需求,例如无法实现递归显示需求等,可以自定义fifter和tag;就像Python内置函数和自定义函数关系;

    1、在app中创建 templatetags目录或Python包(注意  该报的名称必须为 templatetags

    2、templatetags文件夹下随便创建个Python文件,自定义函数;

    from django import template
    
    register=template.Library() 
    @register.filter   #自定义fifter 就使用 fifter装饰器
    def mutil(x,y):
        return x*y
    
    @register.simple_tag   #自定义tag 就使用 simlep_tag装饰器
    def mutil2(x,y,z):
        return x*y*z
    View Code

    3、注册到setings.py文件里

    4、加载到模板里

    {% load mytag %}
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>模板渲染</title>
    </head>
    View Code

     5、引用到模板

    a.

      {{ i| mutil:10 }}      #自定义fifter的使用
      {% mutil2 78 90 20 %}  #自定义tag的使用

    b.注意引用到 母版继承的模板

    {% extends "arya/layout.html" %}
    {% load Count %} #------------------》注意在子模板的 extends之下。 
    {% block content %}

    6、自定义fifter和simp-tag 区别

    1、simple-fifter

    优点:支持iif else 条件判断

     {% if  i|mutil:20 > 100 %}
         <p>大于</p>
     {% else %} }}
         <p>小于</p>
     {% endif %}

    缺点:simple-fifter类型的函数只支持2两个参数

    2、simple-tag

    优点:simple-fifter类型 无限制传参

    {% mutil2 78 90 20 %} #参数无限制

    缺点:不支持iif else 条件判断

    三、母版继承

    在整个网站中,如何减少共用页面区域(比如站点导航)所引起的重复和冗余代码?Django 解决此类问题的首选方法是使用一种优雅的策略—— 模板继承 。

    本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。

    子模板  继承、重写  母板的block内容;

     

    1、母版定义block块:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>后台布局</title>
        <style>
            .header{
                width: 100%;
                height: 48px;
                background-color: blue;
                position: fixed;
                top: 0px;
                left: 0px;
            }
    
            .left{
                width: 200px;
                background-color: mediumvioletred;
                position: fixed;
                top: 48px;
                left: 0px;
                bottom: 0px;
            }
            {#            要想设置长度沾满屏,就设置position: fixed ,bottom: 0px;#}
            .right{
                background-color: pink;
                position: fixed;
                top: 48px;
                left: 200px;
                bottom: 0px;
                right: 0px;
                overflow: scroll;
            }
            .title li{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    <div class="content">
        <div class="header"></div>
        <div class="left">
            <ul class="title" style="list-style-type:none">
                <li><a href="/menu1/">菜单1</a></li>
                <li><a href="/menu2/">菜单2</a></li>
                <li><a href="/menu3/">菜单3</a></li>
            </ul>
        </div>
        <div class="right">
         {% block con %}          
         {% endblock %}
        </div>
    </div>
    </body>
    </html>
    View Code

    2、子版继承母版中 block

    {% extends 'base.html' %}
    {% block con %}
    <h1>菜单{{ id }}</h1>
    <h1>菜单{{ id }}</h1>
    <h1>菜单{{ id }}</h1>
    <h1>菜单{{ id }}</h1>
    <h1>菜单{{ id }}</h1>
    <h1>菜单{{ id }}</h1>  
    {% endblock %}
    View Code

    扩展:

    模板的CSS样式和JS代码不完全是子版想要继承的怎么办?

    模板的定义的block越多越好,这样就可以多处重写母版样式;

    <!DOCTYPE html>
    <html lang="en">
    <head>
    
        <meta charset="UTF-8">
        <title>后台布局</title>
        <style>
            .header{
                width: 100%;
                height: 48px;
                background-color: blue;
                position: fixed;
                top: 0px;
                left: 0px;
            }
    
            .left{
                width: 200px;
                background-color: mediumvioletred;
                position: fixed;
                top: 48px;
                left: 0px;
                bottom: 0px;
            }
            {#            要想设置长度沾满屏,就设置position: fixed ,bottom: 0px;#}
            .right{
                background-color: pink;
                position: fixed;
                top: 48px;
                left: 200px;
                bottom: 0px;
                right: 0px;
                overflow: scroll;
            }
            .title li{
                margin-top: 80px;
            }
        </style>
         {% block  css1 %}
    
         {% endblock %}
    
    </head>
    <body>
    <div class="content">
        <div class="header"></div>
        <div class="left">
            <ul class="title" style="list-style-type:none">
                <li><a href="/menu1/">菜单1</a></li>
                <li><a href="/menu2/">菜单2</a></li>
                <li><a href="/menu3/">菜单3</a></li>
            </ul>
        </div>
        <div class="right">
         {% block con %}
    {#          #这样子版就可以重写母版的CSS样式了,重载JavaScript亦是如此!#}
         {% endblock %}
        </div>
    </div>
    </body>
    </html>
    View Code

    例如:

    1.先创建一个base.htm 用来引入站点都要用到的 jQuery、bootstrap;

    2.head设置 outside_css、outside_js块让其他模板引入外部文件;

    3.body设置content块让其他模板嵌套内容;

    4.button the body and the html中间设置 inside块让用户扩展自己的JavaScript代码;

    这么做的好处: 可以减少代码冗余、提升代码重用性、减少外部JavaScript文件的反复引入耗时,也可以分门别类的管理外部引入文件,避免引入外部文件过多时。容易出现的引入新文件不生效、生效了页面显示错误......这些头令人头疼的问题;

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <title>运维管理平台-面板</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta charset="UTF-8"/>
    
        <!-- jQuery相关开始 注意不要在全局再次引入jQuery -->
        <script src="/static/assets/js/jquery.js"></script>
        <!-- jQuery相关结束 -->
    
        <!-- bootstarp相关开 -->
        <link href="/static/bootstrap/css/bootstrap.css" rel="stylesheet">
        <script src="/static/bootstrap/js/bootstrap.js"></script>
        <!-- bootstarp相关结束-->
    
    
        <!-- redis可视化相关开始-->
        <link rel="stylesheet" href="https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.css">
        <script src="https://cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.js"></script>
        <script src="/static/pligin/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script>
        <script src="/static/pligin/jquery-validation-1.14.0/dist/additional-methods.min.js"></script>
        <script src="/static/pligin/jquery-validation-1.14.0/dist/localization/messages_zh.min.js"></script>
        <script src="/static/pligin/jquery.form.min.js"></script>
        <!-- redis可视化相关结束-->
    
    
        <link href="/static/assets/font-awesome-4.7.0/css/font-awesome.css" rel="stylesheet">
        <link rel="stylesheet" href="/static/assets/css/vendor/animate/animate.min.css">
        <link type="text/css" rel="stylesheet" media="all" href="/static/assets/js/vendor/mmenu/css/jquery.mmenu.all.css"/>
        <link rel="stylesheet" href="/static/assets/js/vendor/videobackground/css/jquery.videobackground.css">
        <link rel="stylesheet" href="/static/assets/css/vendor/bootstrap-checkbox.css">
    
        <link rel="stylesheet" href="/static/assets/js/vendor/rickshaw/css/rickshaw.min.css">
        <link rel="stylesheet" href="/static/assets/js/vendor/morris/css/morris.css">
        <link rel="stylesheet" href="/static/assets/js/vendor/tabdrop/css/tabdrop.css">
        <link rel="stylesheet" href="/static/assets/js/vendor/summernote/css/summernote.css">
        <link rel="stylesheet" href="/static/assets/js/vendor/summernote/css/summernote-bs3.css">
        <link rel="stylesheet" href="/static/assets/js/vendor/chosen/css/chosen.min.css">
    
    
        <link href="/static/assets/css/minimal.css" rel="stylesheet">
        <style>
            #weixin {
                margin-top: 10%;
                text-align: center;
    
            }
    
            #weixin1 {
                width: 120px;
                height: 120px;
            }
    
            #weixin2 {
    
            }
    
            <!--
            头像选择开始
    
            -->
            .my_box {
                width: 75px;
                height: 75px;
                overflow: hidden;
                border-radius: 15px;
                border: 1px solid #ccc;
                position: fixed;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
                margin: auto;
                transition: .6s;
                cursor: pointer;
            }
    
            .my_box:hover {
                animation: my_box 0.5s forwards;
                transition: .5s;
            }
    
            @keyframes my_box {
                form {
                    transform: rotate(0deg);
                }
                to {
                    transform: rotate(360deg);
                }
            }
    
            .my_box img {
                width: 100%;
            }
    
            .xiantiao {
                display: block;
                width: 86%;
                height: 1px;
                border-bottom: 1px solid #ccc;
                margin: 0 auto;
            }
    
            .pic_box {
                width: 609px;
                min-height: 673px;
                height: auto;
                border-radius: 8px;
                background: #fff;
                border: 1px solid #ccc;
                position: fixed;
                top: -1000px;
                left: 0;
                right: 0;
                margin: 0 auto;
            }
    
            .header {
                height: 45px;
                text-align: center;
            }
    
            .close {
                color: #000;
                font-size: 21px;
                line-height: 1;
                text-shadow: 0 1px 0 #fff;
                opacity: .2;
                position: absolute;
                right: 8px;
                top: 2px;
                cursor: pointer;
            }
    
            .pic_box ul {
                padding: 0;
                margin: 0;
                width: 96%;
                height: 511px;
                margin: 10px auto;
            }
    
            .pic_box ul li {
                display: block;
                list-style: none;
                width: 61px;
                height: 61px;
                float: left;
                border-radius: 15%;
                border: 1px solid #ccc;
                margin: 5px 5px;
                transition: .6s;
                cursor: pointer;
                overflow: hidden;
            }
    
            .pic_box ul li:hover {
                transform: scale(1.15);
                transition: .5s;
            }
    
            .pic_box ul li img {
                width: 100%;
            }
    
            .bt_box {
                width: 100%;
                text-align: center;
                font-size: 14px;
                margin-top: 30px;
            }
    
            .bt_box .gb {
                display: inline-block;
                width: 120px;
                height: 35px;
                border-radius: 8px;
                background: #f3f3f3;
                color: #444;
                line-height: 35px;
            }
    
            .bt_box .queren {
                display: inline-block;
                width: 120px;
                height: 35px;
                border-radius: 8px;
                background: #4B8BF5;
                color: #fff;
                line-height: 35px;
            }
    
            @import url("https://fonts.googleapis.com/css?family=Lato");
    
            *,
            *:before,
            *:after { /* Slow, yes I know :) */
                -webkit-box-sizing: border-box;
                -moz-box-sizing: border-box;
                box-sizing: border-box;
            }
    
    
        </style>
        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
        <![endif]-->
    
    
        {% block  out_css %}
    
        {% endblock %}
    
        {% block out_js %}
    
        {% endblock %}
    
    </head>
    
    
    {% block body %}
        your body content
    {% endblock %}
    
    {% block in_js %}
    {% endblock %}
    </html>
    base.html
    {% extends 'base.html' %}
    {% load menu %}
    {% load rbac %}
    {% load Count %}
    
    
    {% block body %}
        <body class="bg-3">
    
    
        <!-- 预加载 -->
        <div class="mask">
            <div id="loader"></div>
        </div>
        <!--预加载 -->
    
        <!-- 这里包装所有页面内容 -->
        <div id="wrap">
    
            <!-- Make page fluid -->
            <div class="row">
    
    
                <!-- 固定导航栏 -->
                <div class="navbar navbar-default navbar-fixed-top navbar-transparent-black mm-fixed-top" role="navigation"
                     id="navbar">
    
                    <!-- 标题 -->
                    <div class="navbar-header col-md-2">
                        <a class="navbar-brand" href="/login_first/">
                            <strong>ITGroupⅡ</strong>运维平台
                        </a>
                        <div class="sidebar-collapse">
                            <a href="#">
                                <i class="fa fa-bars"></i>
                            </a>
                        </div>
                    </div>
                    <!-- 标题 end -->
    
                    <!-- .nav-collapse -->
                    <div class="navbar-collapse">
    
                        <!-- Page refresh -->
                        <ul class="nav navbar-nav refresh">
                            <li class="divided">
                                <a href="#" class="page-refresh"><i class="fa fa-refresh"></i></a>
                            </li>
                        </ul>
                        <!-- /Page refresh -->
    
                        <!-- Search -->
                        <div class="search" id="main-search">
                            <form method='GET'>
                                <input type="text" name="q" value="{{ pw.q_value }}" placeholder="搜索"/>
                        </div>
    
                        <input type="submit" value="搜索" class="btn btn-warning btn-sm"/>
    
                        </form>
                        <!-- Search end -->
    
    
                        <!-- Quick Actions -->
                        <ul class="nav navbar-nav quick-actions">
                            <li class="dropdown divided">
                                <div>
                                    <h4>值班人员:{{ request.session.user_info.username|WhoDutyOfficer }}
                                        联系电话:{{ request.session.user_info.username|WhoDutyPhoneOfficer }}</h4>
                                </div>
                            </li>
                            <li class="dropdown divided user" id="current-user">
                                <div class="profile-photo">
                                    <div class="wrap">
                                        <a class="t"></a>
                                        <div class="my_box">
                                            <form id="uploadForm">
                                                <input class="jide" name="imgsrc" type="hidden" value=""/>
                                                <img src="{{ request.session.Avatar }}" class="my_pic"
                                                     style=" 45px;height: 45px;overflow: hidden;border-radius: 50%"/>
                                            </form>
                                        </div>
    
                                        <div class="pic_box" id="pic_box">
                                            <div class="header">
                                                <p>设置头像</p>
                                                <span class="close">x</span>
                                            </div>
                                            <span class="xiantiao"></span>
                                            <ul>
                                                <li><img src="/static/img/touxiang/0.png"/></li>
                                                <li><img src="/static/img/touxiang/1.png"/></li>
                                                <li><img src="/static/img/touxiang/3.png"/></li>
                                                <li><img src="/static/img/touxiang/4.png"/></li>
                                                <li><img src="/static/img/touxiang/5.png"/></li>
                                                <li><img src="/static/img/touxiang/6.png"/></li>
                                                <li><img src="/static/img/touxiang/7.png"/></li>
    
    
                                            </ul>
                                            <div class="bt_box">
                                                <a class="gb" href="javascript:">关闭</a>
                                                <a class="queren" href="javascript:">保存头像</a>
                                            </div>
                                        </div>
    
                                    </div>
                                </div>
                                <a class="dropdown-toggle options" data-toggle="dropdown" href="#">
                                    {{ request.session.user_info.username }} <i class="fa fa-caret-down"></i>
                                </a>
    
                                <ul class="dropdown-menu arrow settings">
    
                                    <li>
    
                                        <h3>背景色:</h3>
                                        <ul id="color-schemes">
                                            <li><a href="#" class="bg-1"></a></li>
                                            <li><a href="#" class="bg-2"></a></li>
                                            <li><a href="#" class="bg-3"></a></li>
                                            <li><a href="#" class="bg-4"></a></li>
                                            <li><a href="#" class="bg-5"></a></li>
                                            <li><a href="#" class="bg-6"></a></li>
                                        </ul>
    
    
                                    </li>
    
    
                                    <li>
                                        <a href="/login_first/changepwd/"><i class="fa fa-user"></i> 修改密码</a>
                                    </li>
    
                                    <li>
                                        <a href="/login"><i class="fa fa-power-off"></i> 退出</a>
                                    </li>
                                </ul>
                            </li>
    
                            <li>
                                <a href="#mmenu"><i class="fa fa-comments"></i></a>
                            </li>
                        </ul>
                        <!-- /Quick Actions -->
                        <ul class="">
                            <li class="dropdown divided">
                                <div class="box">
                                    <div class="t_news">
                                        <ul class="news_li" id="liliok">
                                        </ul>
                                        <ul class="swap"></ul>
                                    </div>
                                </div>
                            </li>
    
                        </ul>
    
                        <!-- 左侧菜单 -->
                        <ul class="nav navbar-nav side-nav" id="sidebar">
    
                            <li class="collapsed-content">
                                <ul>
                                    <li class="search"><!-- Collapsed search pasting here at 768px --></li>
                                </ul>
                            </li>
    
                            <li class="navigation" id="navigation">
                                <a href="#" class="sidebar-toggle" data-toggle="#navigation">导航 <i
                                        class="fa fa-angle-up"></i></a>
    
                                <ul class="menu">
    
                                    <li class="active">
                                        <a href="/login_first/">
                                            <i class="fa fa-tachometer"></i> 首页
                                            {#                      <span class="badge badge-red">1</span>#}
                                        </a>
                                    </li>
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> 主机管理 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/arya/cmdb/hosts/">
                                                    <i class="fa fa-caret-right"></i> 主机列表
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/cmdb/hosts/add/">
                                                    <i class="fa fa-caret-right"></i> 新增主机
                                                </a>
                                            </li>
    
                                            <li>
                                                <a href="/multitask/command/">
                                                    <i class="fa fa-caret-right"></i> 命令执行
                                                </a>
                                            </li>
    
                                            <li>
                                                <a href="/multitask/transfer_files/">
                                                    <i class="fa fa-caret-right"></i> 文件上传
                                                </a>
                                            </li>
                                        </ul>
                                    </li>
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> 监控管理 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/arya/cmdb/zabbixmsg/">
                                                    <i class="fa fa-caret-right"></i> 监控列表
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/cmdb/zabbixmsg/add/">
                                                    <i class="fa fa-caret-right"></i> 添加监控
                                                </a>
                                            </li>
                                        </ul>
                                    </li>
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> 工单管理 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/arya/cmdb/worker_order/">
                                                    <i class="fa fa-caret-right"></i> 工单列表
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/cmdb/worker_order/?selected_info=alarm_info">
                                                    <i class="fa fa-caret-right"></i> 报警列表
                                                </a>
    
                                            </li>
    
                                            <li>
                                                <a href="/arya/cmdb/track_work/">
                                                    <i class="fa fa-caret-right"></i> 跟进工单
                                                </a>
    
                                            </li>
    
                                            <li>
                                                <a href="/arya/cmdb/worker_order/active_creation/">
                                                    <i class="fa fa-caret-right"></i> 创建工单
                                                </a>
                                            </li>
                                        </ul>
                                    </li>
    
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> DB可视化 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/DBshow/redisIndex/">
                                                    <i class="fa fa-caret-right"></i> redis可视化
                                                </a>
                                            </li>
    
                                        </ul>
                                    </li>
    
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> 图表管理 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/chart/">
                                                    <i class="fa fa-caret-right"></i> 图表预览
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/chartdown/">
                                                    <i class="fa fa-caret-right"></i> 图表导出
                                                </a>
                                            </li>
    
                                        </ul>
                                    </li>
    
                                    <li class="dropdown">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                            <i class="fa fa-list"></i> 权限管理 <b class="fa fa-plus dropdown-plus"></b>
                                        </a>
                                        <ul class="dropdown-menu">
                                            <li>
                                                <a href="/arya/cmdb/userinfo/">
                                                    <i class="fa fa-caret-right"></i> 人员列表
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/rbac/menu/">
                                                    <i class="fa fa-caret-right"></i> 菜单权限
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/rbac/group/">
                                                    <i class="fa fa-caret-right"></i> 分组权限
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/rbac/user/">
                                                    <i class="fa fa-caret-right"></i> 用户权限
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/rbac/role/">
                                                    <i class="fa fa-caret-right"></i> 角色权限
                                                </a>
                                            </li>
                                            <li>
                                                <a href="/arya/rbac/permission/">
                                                    <i class="fa fa-caret-right"></i> URL权限
                                                </a>
                                            </li>
                                        </ul>
                                    </li>
    
                                </ul>
                            </li>
    
    
                            <li class="settings" id="general-settings">
                                <a href="#" class="sidebar-toggle underline" data-toggle="#general-settings">General
                                    Settings <i
                                            class="fa fa-angle-up"></i></a>
    
                                <div id="weixin">
                                    <h4 id="weixin2"><strong>关注运维平台</strong></h4>
                                    <img src="/static/img/qrcode_258.png.jpeg" alt="" id="weixin1">
                                </div>
                    </div>
    
    
                </div>
                <!-- Fixed navbar end -->
    
                <!-- Page content -->
                <div id="content" class="col-md-12">
    
    
                    <!-- content main container -->
                    <div class="main">
    
                        {% block content %}
                        {% endblock %}
                    </div>
                </div>
    
    
                <!-- 右侧缩进框-->
                <div id="mmenu" class="right-panel">
                    <!-- Nav tabs -->
                    <ul class="nav nav-tabs nav-justified">
                        <li class="active"><a href="#mmenu-users" data-toggle="tab"><i class="fa fa-users"></i></a></li>
                    </ul>
    
                    <!-- Tab panes -->
                    <div class="tab-content">
                        <div class="tab-pane active" id="mmenu-users">
                            <h5><strong>Online</strong> Users</h5>
    
                            <ul class="users-list">
    
                                <li class="online">
                                    <div class="media">
                                        <a class="pull-left profile-photo" href="#">
                                            <img class="media-object" src="/static/img/moren.jpg"
                                                 style=" 45px;height: 45px;overflow: hidden">
                                        </a>
                                        <div class="media-body">
                                            <h6 class="media-heading">
                                                <strong>{{ request.session.user_info.username }}</strong>
                                            </h6>
                                            <small><i class="fa fa-map-marker"></i> China, beijing</small>
                                            <span class="badge badge-outline status"></span>
                                        </div>
                                    </div>
                                </li>
    
                            </ul>
    
                            <h5><strong>All</strong> Users</h5>
    
                            <ul class="users-list">
                                {% for user in userlist %}
    
                                    <li class="offline">
                                        <div class="media">
                                            <a class="pull-left profile-photo" href="#">
                                                <img class="media-object" src="/static/img/moren.jpg"
                                                     style=" 45px;height: 45px;overflow: hidden">
                                            </a>
                                            <div class="media-body">
                                                <h6 class="media-heading"><strong>{{ user.username }}</strong></h6>
                                                <small><i class="fa fa-map-marker"></i> China, beijing</small>
                                                <span class="badge badge-outline status"></span>
                                            </div>
                                        </div>
                                    </li>
    
                                {% endfor %}
                            </ul>
    
                        </div>
    
    
                    </div><!-- tab-content -->
                </div>
    
    
                <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    
    
                <!-- Include all compiled plugins (below), or include individual files as needed -->
    
                <script type="text/javascript" src="/static/assets/js/vendor/mmenu/js/jquery.mmenu.min.js"></script>
                <script type="text/javascript" src="/static/assets/js/vendor/sparkline/jquery.sparkline.min.js"></script>
                <script type="text/javascript" src="/static/assets/js/vendor/nicescroll/jquery.nicescroll.min.js"></script>
                <script type="text/javascript"
                        src="/static/assets/js/vendor/animate-numbers/jquery.animateNumbers.js"></script>
                <script type="text/javascript"
                        src="/static/assets/js/vendor/videobackground/jquery.videobackground.js"></script>
                <script type="text/javascript" src="/static/assets/js/vendor/blockui/jquery.blockUI.js"></script>
    
                <script src="/static/assets/js/vendor/flot/jquery.flot.min.js"></script>
                <script src="/static/assets/js/vendor/flot/jquery.flot.time.min.js"></script>
                <script src="/static/assets/js/vendor/flot/jquery.flot.selection.min.js"></script>
                <script src="/static/assets/js/vendor/flot/jquery.flot.animator.min.js"></script>
                <script src="/static/assets/js/vendor/flot/jquery.flot.orderBars.js"></script>
                <script src="/static/assets/js/vendor/easypiechart/jquery.easypiechart.min.js"></script>
    
                <script src="/static/assets/js/vendor/rickshaw/raphael-min.js"></script>
                <script src="/static/assets/js/vendor/rickshaw/d3.v2.js"></script>
                <script src="/static/assets/js/vendor/rickshaw/rickshaw.min.js"></script>
    
                <script src="/static/assets/js/vendor/morris/morris.min.js"></script>
    
                <script src="/static/assets/js/vendor/tabdrop/bootstrap-tabdrop.min.js"></script>
    
                <script src="/static/assets/js/vendor/summernote/summernote.min.js"></script>
    
    
                <script src="/static/assets/js/minimal.min.js"></script>
    
                <link rel="stylesheet" href="/static/jq22.css">
                <script src="/static/jq22.js"></script>
    
    
                <script>
                    $(function () {
    
                        // Initialize card flip
                        $('.card.hover').hover(function () {
                            $(this).addClass('flip');
                        }, function () {
                            $(this).removeClass('flip');
                        });
    
                        // Initialize flot chart
                        var d1 = [[1, 715],
                            [2, 985],
                            [3, 1525],
                            [4, 1254],
                            [5, 1861],
                            [6, 2621],
                            [7, 1987],
                            [8, 2136],
                            [9, 2364],
                            [10, 2851],
                            [11, 1546],
                            [12, 2541]
                        ];
                        var d2 = [[1, 463],
                            [2, 578],
                            [3, 327],
                            [4, 984],
                            [5, 1268],
                            [6, 1684],
                            [7, 1425],
                            [8, 1233],
                            [9, 1354],
                            [10, 1200],
                            [11, 1260],
                            [12, 1320]
                        ];
                        var months = ["January", "February", "March", "April", "May", "Juny", "July", "August", "September", "October", "November", "December"];
    
                        // flot chart generate
                        var plot = $.plotAnimator($("#statistics-chart"),
                            [
                                {
                                    label: 'Sales',
                                    data: d1,
                                    lines: {lineWidth: 3},
                                    shadowSize: 0,
                                    color: '#ffffff'
                                },
                                {
                                    label: "Visits",
                                    data: d2,
                                    animator: {steps: 99, duration: 500, start: 200, direction: "right"},
                                    lines: {
                                        fill: .15,
                                        lineWidth: 0
                                    },
                                    color: ['#ffffff']
                                }, {
                                label: 'Sales',
                                data: d1,
                                points: {show: true, fill: true, radius: 6, fillColor: "rgba(0,0,0,.5)", lineWidth: 2},
                                color: '#fff',
                                shadowSize: 0
                            },
                                {
                                    label: "Visits",
                                    data: d2,
                                    points: {
                                        show: true,
                                        fill: true,
                                        radius: 6,
                                        fillColor: "rgba(255,255,255,.2)",
                                        lineWidth: 2
                                    },
                                    color: '#fff',
                                    shadowSize: 0
                                }
                            ], {
    
                                xaxis: {
    
                                    tickLength: 0,
                                    tickDecimals: 0,
                                    min: 1,
                                    ticks: [[1, "JAN"], [2, "FEB"], [3, "MAR"], [4, "APR"], [5, "MAY"], [6, "JUN"], [7, "JUL"], [8, "AUG"], [9, "SEP"], [10, "OCT"], [11, "NOV"], [12, "DEC"]],
    
                                    font: {
                                        lineHeight: 24,
                                        weight: "300",
                                        color: "#ffffff",
                                        size: 14
                                    }
                                },
    
                                yaxis: {
                                    ticks: 4,
                                    tickDecimals: 0,
                                    tickColor: "rgba(255,255,255,.3)",
    
                                    font: {
                                        lineHeight: 13,
                                        weight: "300",
                                        color: "#ffffff"
                                    }
                                },
    
                                grid: {
                                    borderWidth: {
                                        top: 0,
                                        right: 0,
                                        bottom: 1,
                                        left: 1
                                    },
                                    borderColor: 'rgba(255,255,255,.3)',
                                    margin: 0,
                                    minBorderMargin: 0,
                                    labelMargin: 20,
                                    hoverable: true,
                                    clickable: true,
                                    mouseActiveRadius: 6
                                },
    
                                legend: {show: false}
                            });
    
                        $(window).resize(function () {
                            // redraw the graph in the correctly sized div
                            plot.resize();
                            plot.setupGrid();
                            plot.draw();
                        });
    
                        $('#mmenu').on(
                            "opened.mm",
                            function () {
                                // redraw the graph in the correctly sized div
                                plot.resize();
                                plot.setupGrid();
                                plot.draw();
                            }
                        );
    
                        $('#mmenu').on(
                            "closed.mm",
                            function () {
                                // redraw the graph in the correctly sized div
                                plot.resize();
                                plot.setupGrid();
                                plot.draw();
                            }
                        );
    
                        // tooltips showing
                        $("#statistics-chart").bind("plothover", function (event, pos, item) {
                            if (item) {
                                var x = item.datapoint[0],
                                    y = item.datapoint[1];
    
                                $("#tooltip").html('<h1 style="color: #418bca">' + months[x - 1] + '</h1>' + '<strong>' + y + '</strong>' + ' ' + item.series.label)
                                    .css({top: item.pageY - 30, left: item.pageX + 5})
                                    .fadeIn(200);
                            } else {
                                $("#tooltip").hide();
                            }
                        });
    
    
                        //tooltips options
                        $("<div id='tooltip'></div>").css({
                            position: "absolute",
                            //display: "none",
                            padding: "10px 20px",
                            "background-color": "#ffffff",
                            "z-index": "99999"
                        }).appendTo("body");
    
                        //generate actual pie charts
                        $('.pie-chart').easyPieChart();
    
    
                        //server load rickshaw chart
                        var graph;
    
                        var seriesData = [[], []];
                        var random = new Rickshaw.Fixtures.RandomData(50);
    
                        for (var i = 0; i < 50; i++) {
                            random.addData(seriesData);
                        }
    
                        graph = new Rickshaw.Graph({
                            element: document.querySelector("#serverload-chart"),
                            height: 150,
                            renderer: 'area',
                            series: [
                                {
                                    data: seriesData[0],
                                    color: '#6e6e6e',
                                    name: 'File Server'
                                }, {
                                    data: seriesData[1],
                                    color: '#fff',
                                    name: 'Mail Server'
                                }
                            ]
                        });
    
                        var hoverDetail = new Rickshaw.Graph.HoverDetail({
                            graph: graph,
                        });
    
                        setInterval(function () {
                            random.removeData(seriesData);
                            random.addData(seriesData);
                            graph.update();
    
                        }, 1000);
    
                        // Morris donut chart
                        Morris.Donut({
                            element: 'browser-usage',
                            data: [
                                {label: "Chrome", value: 25},
                                {label: "Safari", value: 20},
                                {label: "Firefox", value: 15},
                                {label: "Opera", value: 5},
                                {label: "Internet Explorer", value: 10},
                                {label: "Other", value: 25}
                            ],
                            colors: ['#00a3d8', '#2fbbe8', '#72cae7', '#d9544f', '#ffc100', '#1693A5']
                        });
    
                        $('#browser-usage').find("path[stroke='#ffffff']").attr('stroke', 'rgba(0,0,0,0)');
    
                        //sparkline charts
                        $('#projectbar1').sparkline('html', {type: 'bar', barColor: '#22beef', barWidth: 4, height: 20});
                        $('#projectbar2').sparkline('html', {type: 'bar', barColor: '#cd97eb', barWidth: 4, height: 20});
                        $('#projectbar3').sparkline('html', {type: 'bar', barColor: '#a2d200', barWidth: 4, height: 20});
                        $('#projectbar4').sparkline('html', {type: 'bar', barColor: '#ffc100', barWidth: 4, height: 20});
                        $('#projectbar5').sparkline('html', {type: 'bar', barColor: '#ff4a43', barWidth: 4, height: 20});
                        $('#projectbar6').sparkline('html', {type: 'bar', barColor: '#a2d200', barWidth: 4, height: 20});
    
                        // sortable table
                        $('.table.table-sortable th.sortable').click(function () {
                            var o = $(this).hasClass('sort-asc') ? 'sort-desc' : 'sort-asc';
                            $('th.sortable').removeClass('sort-asc').removeClass('sort-desc');
                            $(this).addClass(o);
                        });
    
                        //todo's
                        $('#todolist li label').click(function () {
                            $(this).toggleClass('done');
                        });
    
                        // Initialize tabDrop
                        $('.tabdrop').tabdrop({text: '<i class="fa fa-th-list"></i>'});
    
                        //load wysiwyg editor
                        $('#quick-message-content').summernote({
                            toolbar: [
                                //['style', ['style']], // no style button
                                ['style', ['bold', 'italic', 'underline', 'clear']],
                                ['fontsize', ['fontsize']],
                                ['color', ['color']],
                                ['para', ['ul', 'ol', 'paragraph']],
                                ['height', ['height']],
                                //['insert', ['picture', 'link']], // no insert buttons
                                //['table', ['table']], // no table button
                                //['help', ['help']] //no help button
                            ],
                            height: 143   //set editable area's height
                        });
    
                        //multiselect input
                        $(".chosen-select").chosen({disable_search_threshold: 10});
    
                    });
    
                    <!-- 头像选择开始-->
                    $(".close,.gb").click(function () {
                        $(".pic_box").animate({
                            'top': '-1000px'
                        }, 500);
                    }),
                        $(".my_box").click(function () {
                            $(".pic_box").animate({
                                'top': '15px',
                            }, 300);
                        }),
                        $(".queren").click(function () {
                            var src = $(".jide").val();
                            $.ajax({
                                url: '/login_first/',
                                type: 'post',
                                data: {'imgsrc': src, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
                                success: function (data) {
                                    if (data == 'OK') {
                                        window.location.reload()
                                    }
                                }
    
    
                            });
                            //$.ajax与index.php交互,在php中判断文件,保存至数据库即可
    
                            /*if(src != ""){
                                $.ajax({
                                    url:"index.php",
                                    type:'post',
                                    data:{'imgsrc':src},
                                    success:function(data){
                                        $(".my_pic").attr('src',src);
                                        $(".pic_box").animate({
                                            'top':'-1000px'
                                        },500);
                                        console.log(data);
                                    }
                                })
                            }else{
                                return false;
                            }*/
    
                            /**
                             * 后台我是用Thinkphp框架写的代码如下
                             $show=M('user')->getByusername($_SESSION['_username']);
                             if(!empty($_POST['imgsrc'])){
                        $_POST['id']=$show['id'];
                        $x=$info->create();
                        $res=$info->save();
                        if($res){
                            echo json_encode($_POST['imgsrc']);
                        }
                    }
                             */
    
    
                            //效果展示,在服务器中把这一段删除,用上面那一段
                            if (src != "") {
                                $(".my_pic").attr('src', src);
                                $(".pic_box").animate({
                                    'top': '-1000px'
                                }, 500);
                            } else {
                                return false;
                            }
    
                        });
                    var $box = document.getElementById('pic_box');
                    var $li = $box.getElementsByTagName('li');
                    var index = 0;
                    for (var i = 0; i < $li.length; i++) {
                        $li[i].index = i;
                        $li[i].onclick = function () {
                            $li[index].style.borderRadius = "15%";
                            this.style.borderRadius = "50%";
                            index = this.index;
                        }
                    }
                    $(".pic_box li img").click(function () {
                        var src = $(this).attr("src");
                        $(".jide").val(src);
                    });
    
                    $.ajax({
                        url: '/list_trackwork_api/',
                        type: 'post',
                        data: {'csrfmiddlewaretoken': '{{ csrf_token }}'},
                        success: function (data) {
                            var data = JSON.parse(data);
                            var link1 = null;
                            var seach1 = null;
                            var title1 = null;
                            $.each(data, function (i, v) {
                                var lilili = '';
                                $.each(v, function (k1, v1) {
                                    if (k1 == 'link') {
                                        link1 = v1
                                    }
                                    if (k1 == 'seach') {
                                        seach1 = v1
                                    }
                                    if (k1 == 'title') {
                                        title1 = v1
                                    }
                                    lilili = '<li><a href="' + link1 + '"><b>' + seach1 + ':' + title1 + '</b></a></li>';
    
                                });
                                $('#liliok').append(lilili);
    
    
                            });
                        }
                    })
    
                </script>
        </body>
    
    {% endblock %}
    {#</html>#}
    layout.html
    {% extends "arya/layout.html" %}
    
     {% block out_js %}
         <script src="/static/pligin/nifty/nifty.min.js"></script>
     {% endblock %}
    {% block content %}
        {% include 'components/hostgroups.html' %}
        <div class="col-lg-9">
            <div class="panel">
                <div class="panel-heading">
                    <h3 class="panel-title">命令</h3>
                </div>
                <div class="panel-body">
                    <textarea class="form-control" id="cmd"></textarea>
                    <button onclick="PostTask('cmd')" id="execute_but" class="btn btn-info pull-right">执行</button>
                    <button class="btn btn-danger" onclick="End()">终止</button>
    
                </div>
    
            </div>
    
            {% include 'components/taskresult.html' %}
    
        </div>
        <script>
            {% include 'components/post_task.js.html' %}
        </script>
    {% endblock %}
    其他子页面

    3、include 组件嵌套

    3.1.把多个模板共用的css或者JavaScript代码集成到1个组件,变成公共组件,让其他模板通过{% include  xxx %}   直接引入进来使用即可;(提高代码重用性)

    {% load simple-fifter %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>主页</title>
    </head>
    <body>
    <h2>simple-fifter</h2>
    {% for iteam in userinfo %}
        {{ iteam|my_upper:'666' }}
    {% endfor %}
    
    <h2>simple-tag</h2>
    {%my_join userinfo '666' '888' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    {% include 'public.html' %}
    
    
    </body>
    </html>
    View Code

    3.2.多层嵌套的include组件

    在inculde组件里还可以继续嵌套include组件,这样可以使你的模板代码变得更加简洁、灵活、易于扩展。

    {% extends "arya/layout.html" %}
    {% block  out_css %}
        <link rel="stylesheet" href="/static/date/bootstrap-datetimepicker.min.css">
    {% endblock %}
    {% block out_js %}
        <script src="/static/date/moment.js"></script>
        <script src="/static/date/bootstrap-datetimepicker.min.js"></script>
    {% endblock %}
    {% block content %}
        <div class="col-md-12">
            {% if task_log_id %}
                {% include 'components/task_log.html' %}
    
            {% else %}
                {% include 'components/log_seach.html' %}
            {% endif %}
        </div>
    
    {% endblock %}
    
    {% block in_js %}
        <script>
            $('[name="q"]').hide();
            $('[value="搜索"]').hide();
        </script>
    {% endblock %}
    audit.html
    <a href="/multitask/task/" class="btn btn-primary btn-sm">返回</a>
    
    <table class="table  table-condensed table-responsive" style="color: white">
        <thead>
        <tr>
            <th>执行时间</th>
            <th>任务</th>
            <th>状态</th>
        </tr>
        </thead>
    
        <tbody>
        {% for obj in  task_list %}
            <tr>
                <td>{{ obj.date }}</td>
                <td>{{ obj.result }}</td>
                {% if obj.status == 0 %}
                    <td>成功</td>
                {% elif  obj.status == 3 %}
                    <td>超时</td>
                {% endif %}
            </tr>
        {% endfor %}
        </tbody>
    
    </table>
    {% include 'components/task_log_page.html' %}
    task_log.html
    <nav aria-label="Page navigation" style="position: fixed;bottom: 5px;right: 50%">
        <ul class="pagination">
            {% if task_list.has_previous %}
                <li><a href="/multitask/log/{{ task_log_id }}/?page={{ task_list.previous_page_number }}">上页 <span
                        class="sr-only">(current)</span></a></li>
            {% else %}
                <li class="disabled"><a href="#">上页</a></li>
            {% endif %}
            {% for page in p.page_range %}
                <li><a href="/multitask/log/{{ task_log_id }}/?page={{ page }}">{{ page }} <span
                        class="sr-only">(current)</span></a></li>
            {% endfor %}
            {% if task_list.has_next %}
                <li><a href="/multitask/log/{{ task_log_id }}/?page={{ task_list.next_page_number }}">下页 <span
                        class="sr-only">(current)</span></a></li>
            {% else %}
                <li class="disabled"><a href="#">下页</a></li>
            {% endif %}
    
        </ul>
    </nav>
    task_log_page.html

    -------------------------------------------------------------------

    <form action=""method="post">
        {% csrf_token %}
        <input id="start" type="text" name="start">
        <input id="end" type="text" name="end">
        <input type="submit" class="btn-info" value="搜素">
    </form>
    <script>
        $("#start").datetimepicker({
            format: 'YYYY年MM月DD日HH时mm分ss秒',
            locale: moment.locale('zh-CN')
        });
    
        $("#start").datetimepicker({
            format: 'YYYY-MM-DD',
            locale: moment.locale('zh-cn'),
            defaultDate: "1990-1-1"
        });
        $("#end").datetimepicker({
            format: 'YYYY年MM月DD日HH时mm分ss秒',
            locale: moment.locale('zh-CN')
        });
    
        $("#end").datetimepicker({
            format: 'YYYY-MM-DD',
            locale: moment.locale('zh-cn'),
            defaultDate: "1990-1-1"
        });
    </script>
    {% include 'components/task.html' %}
    {% include 'components/task_page.html' %}
    log_seach.html
    <table class="table table-responsive" style="color: white">
        <thead>
        <tr>
            <th>序号</th>
            <th>执行时间</th>
            <th>任务类型</th>
            <th>任务概览</th>
            <th>操作</th>
        </tr>
        </thead>
    
        <tbody>
        {% for obj in task_list %}
            <tr>
                <td>{{ forloop.counter0 }}</td>
                <td>{{ obj.date }}</td>
                {% if obj.task_type == 0 %}
                    <td>cmd</td>
                {% else %}
                    <td>file_transfer</td>
                {% endif %}
                <td>{{ obj.content }}</td>
                <td><a href='/multitask/log/{{ obj.pk }}/' class='btn btn-primary btn-sm button'>详细</a></td>
            </tr>
        {% endfor %}
        </tbody>
    
    </table>
    task.html
    <nav aria-label="Page navigation" style="position: fixed;bottom: 5px;right: 50%">
            <ul class="pagination">
                {% if task_list.has_previous %}
                    <li><a href="/multitask/task/?page={{ task_list.previous_page_number }}">上页 <span
                            class="sr-only">(current)</span></a></li>
                {% else %}
                    <li class="disabled"><a href="#">上页</a></li>
                {% endif %}
                {% for page in p.page_range %}
                    <li><a href="/multitask/task/?page={{ page }}">{{ page }} <span class="sr-only">(current)</span></a></li>
                {% endfor %}
                {% if task_list.has_next %}
                    <li><a href="/multitask/task/?page={{ task_list.next_page_number }}">下页 <span
                            class="sr-only">(current)</span></a></li>
                {% else %}
                    <li class="disabled"><a href="#">下页</a></li>
                {% endif %}
    
            </ul>
        </nav>
    task_page.html

    二龙湖浩哥:http://www.cnblogs.com/yuanchenqi/articles/6811632.html#3763280

  • 相关阅读:
    Sqlsugar中使用Codefrist创建数据库
    EFCore中CoreFrist多个上下文
    高并发
    优先级反转
    二叉树算法
    使用AJAX上传图片
    Entity Framework
    .Net面试题
    LC 1515. Best Position for a Service Centre (Simulated Annealing)
    git
  • 原文地址:https://www.cnblogs.com/sss4/p/7071183.html
Copyright © 2011-2022 走看看