设为首页 加入收藏

TOP

Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)(三)
2019-06-11 22:06:14 】 浏览:81
Tags:Web 框架 Django_04 模板 了解 过滤器 标签 定义 inclusion_tag 继承 导入
次 嗨起来!!! 嗨起来!!! 嗨起来!!! 这是最后一次了啊 l = [] 你给我的容器类型是个空啊,没法for循环
  • 自定义过滤器/标签/inclusion_tag:

    必须做的三件事
    1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)
    2.在该新建的文件夹内新建一个任意名称的py文件
    3.在该py文件中需要固定写下面两句代码
    ①这里在app01项目程序文件夹新建templatetags文件夹,在此文件夹内新建一个mine.py文件,打开mine.py文件>>输入:

    from django import template
    register = template.Library()
    
    # 自定义过滤器
    @register.filter(name='my_filter')
    def index(a, b):
        return a*b
    
    # 自定义标签:
    @register.simple_tag
    def plus(a, b, c):
        return a+b+c

    ②前端html文件内使用过滤器或者标签:

    {% load mine %}   <!-- 要使用自定义过滤器和标签,需要先加载自己定义的文件 -->
    {{ 9|my_filter:11 }}  <!-- 使用自定义过滤器,注意这里需要用name的值作为使用方法 -->
    {% my_tag 1 2 3 %}  <!-- 使用自定义标签,注意这里需要用name的值作为使用方法 -->

    显示的结果:

    99
    6

     自定义inclusion_tag

     inclusion_tag的作用:创建一个动态的html页面文件a.html,这个页面文件a可以在另外一个页面b中被调用,实现这个页面a应该有的功能。比如:
    在上面的mine.py文件中创建inclusion_tag:

    # mine.py文件  创建inclusion_tag
    
    from app01 import models 
    from django import template
    register = template.Library()
    
    @register.inclusion_tag('inclusion_t_test.html', name='my_inclusion')
    def func():
        book_list = models.Book.objects.all()
        return {'list': book_list} 
    
    #将book_list的QuerySet对象列表传进inclusion_t_test.html文件

    inclusion_t_test.html文件里面:

    <!-- inclusion_t_test.html文件,被导入的html文件-->
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>title</th>
                <th>price</th>
            </tr>
        </thead>
        <tbody>
            {% for obj in list %}
                <tr>
                    <td>{{ obj.id }}</td>
                    <td>{{ obj.title }}</td>
                    <td>{{ obj.price }}</td>
                </tr>
            {% endfor %}
        </tbody>
    </table>

    调用的html页面文件:

    {% load mine %}    <!-- 必须要先加载创建标签的文件-->
    {% my_inclusion %}  <!-- 调用inclusion_t_test.html页面文件,这里使用该标签的name来调用-->

  • 三、模板的继承与模板的导入

    • 模板的继承:
      继承的概念我们都知道:在类里面是直接可以使用基类中的属性和方法,也就是直接能用,不需要自己再写的意义。
      而模板的继承:我们需要使用一个网页中一些固定不变的部分,再不用再自己写或者复制的前提下,只需要写几段代码就能拿来在一个新的网页使用,就像一个模板,模板中变化的地方我们自己指定,其他地方不变,值只变化我们指定的地方。
      实现过程:
      首先需要在被继承的模板中划分多个区域,这些区域是我们能的可变动区
      {% block 给区域起的名字 %}
      
      {% endblock %}
      
      <!--通常情况下一个模板中应该至少有三块-->
      {% block css %}
        页面css代码块
      {% endblock %}
      
      {% block js %}
        页面js代码块
      {% endblock %}
      
      {% block content %}
        页面主体内容
      {% endblock %}
      子板继承模板:
      {#先继承模板所有的内容#}
              {% extends 'home.html' %}
      
      {#然后根据block块的名字修改指定区域的内容#}
              {% block content %}
                  <h1>登录页面</h1>
                      <form action="">
                          <p>username:<input type="text" class="form-control"></p>
                          <p>password:<input type="text" class="form-control"></p>
                          <input type="submit" class="btn btn-success">
                      </form>
              {% endblock %}

      如果在一个block模板中需要保留原始的内容则可以在这个block中任意你想要的位置添加一个{{ block.super }},就可以保留原内容
    • 模板的导入
      将一段html当做模块的方式导入到另一个html展示
      {% include '想导入的html文件名' %}

      模板导入与自定义inclusion_tag的区别:模板导入的页面内容是静态的、不变的,而通过自定义inclusion_tag导入的页面文件可以是动态的,可动性自己掌控。

      补充:静态文件配置

      {% load static %}  
          
          <link rel='stylesheet' href="{% static 'css/mycss.css'%}">  # 第一种方式
          <link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">  # 第二种方式

       

     

    首页 上一页 1 2 3 下一页 尾页 3/3/3
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇Python 线性方程组求解之:Jacobi.. 下一篇01_爬虫的基本概念和流程

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目