模板标签

1.常用的模板标签
    -作用是什么?提供各种逻辑
    -模板标签格式  大括号 百分号 语句 百分号 大括号,还要有结尾也是大括号 百分号 end语句 百分号 大括号
                              比如 {% for item in items %}   
                               item.元素1
                               item.元素2
                               item.元素3
                                 .......
                          {% endfor %}
        其中items可以是视图函数传过来的参数里的模板变量,模板标签里可以通过循环取得它里边的元素,依次把这些元素进行渲染,去执行模板标签和模板结尾标签之间定义的操作,循环直到取完items里边的元素为止

{% for stu in students %}
            <tr {% if stu.sex == "女" %} style="color: red"{% endif %}>
                <td><a href="{% url 'teacher:detail' stu.id %}">{{forloop.counter}}</a></td>
                <td>{{stu.name}}</td>
                <td>{{stu.age}}</td>
                <td>{{stu.sex}}</td>
            </tr>
            {% endfor %}

    -常用标签  for、 if、
        (1)其中if语句的关系运算符==,<,>,<=,>= 运算符前后必须有空格,可以
            {% if a== 'aaa' %}  此情况下执行某某语句
            {% elif a>'aaa' %} 此情况下执行某某语句
            {% else %}
            {% endif %}
        (2)url标签是单标签不用有endurl  {% url 空格'app:视图函数'空格 需要传的参数1 空格 参数2 %},url模板标签也可以动态解析url,
            注意:'app:视图函数'前后不要加'/',需要提前在urls.py中为app命名,以及给相应视图函数的path起名name='某某某名字'
        (3)with {% with s2 = students.2%}
                        {% endwith %}
          (4)循环的模板标签里想取得序号,可以使用{{forloop.counter}},forloop可以获取当前for循环的迭代次数,.counter是下标以1开始,.counter0是下标从0开始
    想让循环迭代次数从大到小排是.revcounter,以1结束,.revcounter0是以0结束
        
        总结:本质还是字符串格式化,语法 :
        {% tag %} {% endtag %}
        {% tag 参数 参数 %}
    注意在模板标签的{}里用到的模板变量不用再加双层花括号了,变量名就能用,在模板标签和模板结尾标签之间的语句里模板变量要用双层花括号
    
2.模板的继承与引用  (include 和extends也是模板标签)
    -引用 include标签   {% include 路径 %}可以把别的模板渲染完后的内容放到其他模板里你想放的位置,include标签是单独的标签,没有结尾标签,可以用于插入广告模板页面等,他的参数就是其他想引用的模板页面的路径
    -继承 extends标签 解决前端代码冗余
        (1)步骤:1)新建base模板,把所有模板最基本的共同内容写到base里,把其他模板需要更改的部分都去掉
                  2)在需要继承base模板的我们定义的模板,最上面写extends标签{% extends 'app名/base.html' %},extends标签必须在模板文本最上面,注意标签里百分号后,extends后,路径后 都要有空格
                    继承的父模板外用引号括起来
                  3) 某个模板文本最上写上extends标签后,就代表它继承base父模板,它自己本身的内容就都不起作用了,只会显示继承自父模板的内容,去返回父模板所渲染的东西

<title>{% block title %}base模板{% endblock %}</title>
    {% block link %}
        这里引入你自己想用的css文件吧...
    {% endblock %}
{% block c1 %}
        <p>abcdefgh....</p>
    {% endblock %}

上面这些是父模板中的代码

{% extends 'teacher/base.html' %}
{% block link %}
    {% load static %}
    <link href="{% static 'teacher/css/login_1.css'%}" rel="stylesheet">
{% endblock %}
{% block title %}loginteacher{% endblock %}
{% block c1 %}
    <div class="container">

      <form class="form-signin">
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="inputEmail" class="sr-only">Email address</label>
        <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <div class="checkbox">
          <label>
            <input type="checkbox" value="remember-me"> Remember me
          </label>
        </div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
      </form>

    </div> <!-- /container -->
    {% endblock %}

这是自定义的模板中的代码


         (2) block标签 :base模板好比字符串中占位符,预留出来给继承它的模板显示自己的内容
              注意,block标签是写父模板文本base.html中的时候,是留坑留给继承它的模板页面的,
                  block标签写在自定义的有个性内容的模板文本中的时候,可以填坑去定义本模板自定义的个性内容
                  本质还是字符串格式化,占位坑想挖几个挖几个,想挖哪里挖哪里
              语法 1)父模板中,想留空的位置{% block 随便起个名字 %}  。。。。{% endblok %}    block标签也是闭合标签,要有结束标签,起的名字不要加引号扩起来
                    父模板中可以插入多个不同命名的block标签和它自己的结尾block标签
                    block标签还能写到html页面标签当中,比如<title>{% block title %}base模板{% endblock %}</title>
                     2)继承父模板的自定义模板中,想自定义东西的位置写成对的block标签和结尾block标签名字要和副模版中对应的block标签名字相同,比如头部block标签里定义css样式,body里定义自定义显示的内容
                        {% block 和父模板中对应的block标签一样的名字 %}
                        任何自定义内容
                        {% endblock %}
                        如果副模版的block标签写在html标签中,自定义模板文本对应名字的block标签直接写html标签里的内容就可以了,外面的html标签都继承过来了
                    多个自定义模板可以继承同一个父模板,可以像python里的类一样多次继承,我们可以继承一个父模板,它继承了别的父模板
                   3)技巧:父模板和自定义模板尽可能多挖坑,
                    常见的挖的坑都有:(1)定义一个页面底部的block标签{% block domready %}{% endblock %}用来留给自定义模板放js代码的地方
                                  (2)页面上部定义的放css的坑
                                   (3)页面上部定义的放script代码的坑
            



posted @ 2019-03-03 12:46  变异毛毛虫  阅读(134)  评论(0编辑  收藏  举报