zoukankan      html  css  js  c++  java
  • Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版

    include标签--模版导入

    '''
    前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的
    如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字(接口),在有该版块的页面中直接导入即可
    语法:{% include '版块页面的路径' %}
    '''

    公共的页面版块

    <!-- templates/public.html -->
    <!-- 该页面位公共的页面代码块,所以不需要完整的html页面结构 -->
    <div class="public">
        <!-- 公用页面版块的详细html代码 -->
    </div>

    公告页面版块的样式

    /* static/css/public.css */
    /* 该样式文件是为公告页面代码块提供页面布局的css样式 */
    .public {
        /* 具体的css样式块 */
    }

    使用公告版块的页面们

    <!-- 拥有公共页面版块的 templates/first.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>first</title>
        <link rel="stylesheet" href="/static/css/public.css">
    </head>
    <body>
    <!-- 该页面的其他html代码块 -->
        
    <!-- 加载相同的页面版块 -->
    {% include 'public.html' %}
        
    <!-- 该页面的其他html代码块 -->
    </body>
    </html>
    <!-- 拥有公共页面版块的 templates/second.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>second</title>
        <link rel="stylesheet" href="/static/css/public.css">
    </head>
    <body>
    <!-- 该页面的其他html代码块 -->
        
    <!-- 加载相同的页面版块 -->
    {% include 'public.html' %}
        
    <!-- 该页面的其他html代码块 -->
    </body>
    </html>
    '''
    link导入静态的css样式
    include标签导入静态的html页面
    '''

    inclusion_tag自定义标签--模版导入

    '''
    前提:与include标签出现的页面需求很类似,但是这些不是完全相同的版块,因为版块内的细节不是完全一致
    如何运用:
    1. 先封装相似的页面标签结构,为数据不同且页面标签个数也不同的地方采用Django模版语言写活(数据决定了最终标签个数)
    2. 自定义inclusion_tag,将封装的页面文件丢给inclusion_tag装饰器,自定义的函数的参数为不同的数据,函数的返回值就是用关键词形式将参数返回
    3. 在拥有该相似版块的页面中导入自定义tag,并使用自定义tag传入具体实参即可
    '''

    公共类似的页面版块

    <!-- templates/public_tag.html -->
    <!-- 该页面位公共的页面代码块,所以不需要完整的html页面结构 -->
    <ul class="public_tag">
        <!-- 公用页面版块的详细html代码 -->
        {% for foo in list %}
        <li>{{ foo }}</li>
        {% endfor %}
    </ul>
    <!-- 注:拥有该公共页面代码块的页面会为其提供存放不同数据的 list变量  -->

    自定义inclusion_tag

    # app/templatetags/owen_tags.py
    
    from django.template import Library
    register = Library()
    
    @register.inclusion_tag('public_tag.html')
    def header_list(list):
        return {'list': list}

    使用公告版块的页面们

    <!-- 拥有公共页面版块的 templates/first_tag.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>first_tag</title>
    </head>
    <body>
    <!-- 该页面的其他html代码块 -->
        
    <!-- 加载共同类似的页面版块 -->
    {% load owen_tags %}
    {% with [1, 2, 3, 4, 5] as list %}
        {% header_list list %}
    {% endwith %}
        
    <!-- 该页面的其他html代码块 -->
    </body>
    </html>
    <!-- 拥有公共页面版块的 templates/second_tag.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>second_tag</title>
    </head>
    <body>
    <!-- 该页面的其他html代码块 -->
        
    <!-- 加载共同类似的页面版块 -->
    {% load owen_tags %}
    {% with [10, 30, 50] as list %}
        {% header_list list %}
    {% endwith %}
        
    <!-- 该页面的其他html代码块 -->
    </body>
    </html>

    母版

    '''
    前提:多个页面的多个版块相同或相似,只有少部分版块是自己独有的,将共有的部分全部提出封装,因为包含了页面大部分版块结构,所以我们称呼其为 母版
    如何运用:
    1. 先封装母版:大部分版块相同或相似的base.html,在特定的位置留出相应的block接口
    2. 每个需要运用母版页面的页面来继承母版 {% extends '母版页面的路径' %}
    3. 在自己页面中的任意位置书写block中自身独有的页面内容 {{% block block名 %} ... {% endblock %}}
    4. 如果需要继承母版block中原有的内容,使用 {{ block.super }} 来获取
    '''

    公共的母版页面

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>{{ title }}</title>
        <link rel="stylesheet" href="/static/css/base.css">
        {% block style %}
            {# 为继承该母版的页面引入自身样式文件通过的block #}
        {% endblock %}
    </head>
    <body>
    <!-- 母版有有大量的共同版块 -->
    <!-- 母版有有大量的共同版块 -->
        
    <!-- 母版有有大量的共同版块 -->
    {% block own %}
        {# 为继承该母版的页面提供书写自己页面独有内容的block #}
    {% endblock %}
        
    <!-- 母版有有大量的共同版块 -->
    <!-- 母版有有大量的共同版块 -->
    </body>
    </html>

    页面样式文件均放在static/css中,每个html文件按需导入自己的css文件

    /* static/css/base.css */
    /* static/css/login.css */
    /* static/css/register.css */

    继承母版的login页面

    {% extends 'base.html' %}
    
    {% block style %}
    <link rel="stylesheet" href="/static/css/login.css">
    {% endblock %}
    
    {% block own %}
    {{ block.super }}  {# 继承该母版的block中原有的内容 #}
    <div class="login">登录页面独有的登录版块</div>
    {% endblock %}

    继承母版的register页面

    {% extends 'base.html' %}
    
    {% block own %}
    <div class="register">注册页面独有的注册版块</div>
    {% endblock %}
    
    {% block style %}
    <link rel="stylesheet" href="/static/css/register.css">
    {% endblock %}
    
    <!-- 继承母版的页面通过替换母版留出的block块,来实现自己页面独有的版块 -->
    <!-- 替换block块的顺序随意 -->
  • 相关阅读:
    超级详细Tcpdump 的用法
    Javascript网站繁简转换解决方案
    IIS6.0下创建用户隔离模式FTP站点
    如何开启IIS里的FTP主动模式(PASV模式)
    C#正则表达式小结
    ServU权限提升再提升记一次虚拟主机入侵
    Linux命令网络操作之ifconfig
    创建使用 Active Directory 模式隔离用户的新 FTP 站点
    远程控制电脑创建影子帐户(后门)
    Linux shell编程笔记总结
  • 原文地址:https://www.cnblogs.com/lizeqian1994/p/10474118.html
Copyright © 2011-2022 走看看