zoukankan      html  css  js  c++  java
  • Django 06模板语言的复用

    Django模板语言的复用

    include标签

    '''
    前提:项目中,往往会出现多个页面拥有一个或几个相同的页面板块,或是一个页面多个页面板块是相同的
    解决:我们可以采用模板语言复用 include标签 来帮我们解决,就避免了大量的复制粘贴html页面板块代码
    '''
    
    • 公共的页面板块
    <!-- 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>
    

    inclusion_tag自定义标签

    '''
    前提:与include标签出现的页面需求很类似,但是这些不是完全相同的板块,因为板块内的细节不是完全一致
    解决:我们可以采用模板语言复用 自定义inclusion_tag标签 来帮我们解决,同样来减少代码的冗余
    '''
    
    • 自定义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/public_tag.html -->
    <!-- 该页面位公共的页面代码块,所以不需要完整的html页面结构 -->
    <ul class="public_tag">
        <!-- 公用页面板块的详细html代码 -->
        {% for foo in list %}
        <li>{{ foo }}</li>
        {% endfor %}
    </ul>
    <!-- 注:拥有该公共页面代码块的页面会为其提供存放不同数据的 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>
    
    

    母版继承

    母版:{% block title%}****{% endblock %}
    子版:{% extands 'xxxx.html'%}
    	 {% block title%}****{% endblock %}子版标题
    	 {% block.super%} 保留母版中原有内容
    
    
    '''
    前提:多个页面的多个板块是一致或是类似的,只有少部分或是一部分板块是完全不一致的
    解决:我们可以采用模板语言复用 母版 来帮我们解决,通过多个页面继承母版,只书写自己独有的板块来减少代码的冗余
    '''
    
    

    母版:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{% endblock %}</title>
        <link rel="stylesheet" href="/static/commons.css">
        <style>
            .pg-header{
                height: 48px;
                background-color: seashell;
                color: green;
            }
        </style>
        {% block css %}{% endblock %}  {# 自定义css使用 #}
    </head>
    <body>
        <div class="pg-header">主机管理</div>
        {% block center %}{% endblock %}
        <script src="/static/jquery.js"></script>
        {% block js %}{% endblock %}   {# 自定义js使用 #}
    </body>
    </html>
    
    

    子版:

    {% extends 'master.html' %}  {# 导入模板文件 #}
    
    {% block title %}用户管理{% endblock %}  {# 标题 #}
    
    {% block center %}  {# 内容 #}
        <h1>用户管理</h1>
        <ul>
            {% for i in u %}
                <li>{{ i }}</li>
            {% endfor %}
        </ul>
    {% endblock %}
    
    {% block css %}     {# 自定义css #}
        <style>
            body{
                background-color: white;
            }
        </style>
    {% endblock %}
    
    {% block js %}      {# 自定义js #}
        <script></script>
    {% endblock %}
    
    
    • 公共的母版页面
    <!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 %}
    <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块的顺序随意 -->
    
    
    
  • 相关阅读:
    [转载]HashSet的存储机制
    Java基础加强
    [转载]JDK的动态代理深入解析(Proxy,InvocationHandler)
    Java语言基础Html
    Java语言基础JavaScript
    多线程数据与控制同步
    Expression Tree Basics表达式树基础
    调试优化利器ASP.NET 跟踪
    css position relative ,absolute ,float
    .net date /日期格式化
  • 原文地址:https://www.cnblogs.com/prodigal/p/10483794.html
Copyright © 2011-2022 走看看