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块的顺序随意 -->

原文地址:https://www.cnblogs.com/lizeqian1994/p/10474118.html

时间: 2024-10-09 21:58:01

Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版的相关文章

java_自定义标签,我的第一个自定义标签!

自定义标签,我的第一个自定义标签! 总共分两步 编写一个实现tag接口的java类,把jsp页面中的java代码移到这个类中,(标签处理器类) 编写标签库描述符(tld)文件,在tld文件中把标签处理器类描述成一个标签 一.案例, 输出客户端IP ViewIP.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&g

深入分析JavaWeb Item25 -- 自定义标签开发案例和打包自定义标签库

一.开发标签库案例 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java package me.gacl.web.simpletag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import jav

MyEclipse默认标签TODO,XXX,FIXME和自定义标签的使用

MyEclipse中的一些特殊的注释技术包括:1.    // TODO —— 表示尚未完成的待办事项.2.    // XXX —— 表示被注释的代码虽然实现了功能,但是实现方案有待商榷,希望将来能改进.3.    // FIXME —— 表示被注释的代码需要被修正.4.自定义标签:进入Windows->Perferences->Java->Compile->Task Tags,我们就可以自定义任务标签,Eclipse中可以支持HIgh,Normal,Low三种级别的任务.

[原创]java WEB学习笔记41:简单标签之带属性的自定义标签

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Django框架自定义标签和过滤器

自定义过滤器 '''定义一个无参数过滤器''' 1:#:在当前的应用中创建一个templatetags的文件夹(必须叫这个名字),然后在文件夹中创建一个python文件,名字随便 2:#在新建的python中引入django模块的template类,然后实例化一个register对象,对象的名字必须是register from django import template register = template.Library()#register对象名字不可更改 3:#在新建的python中定

Java Web总结十六之一自定义标签

一.自定义标签简介 1.为什么要使用自定义标签? 自定义标签主要用于移除Jsp页面中的<%java%>代码. 2.开发自定义标签的步骤: 1)开发自定义标签处理类,该类需要实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法. 2)编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述,并放置在WEB-INF/目录下. 3)完成以上操作,即可在JSP页面中导入和使用自定义标签. 二.自定义标签描述 1.实现SimpleTag接口的标签通常称为简单标

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="

JSTL自定义标签

这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但是没有java代码也无法获取相关数据或完成相关操作.那么这时候我们就可以自己定义一个标签,来完成需要用java代码完成的事情,这样Jsp页面就会清洁很多,可读性也更强.JSP中使用自定义标签移除只需要完成以下两个步骤: 1)编写一个实现Tag接口的java类(标签处理类): 2)编写标签库描述符(t

JSP自定义标签开发

一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 一, 自定义标签  :实现了特定接口的java类,封装了java代码编写的预定义行为.  * 在运行时,标签被替换成相应的预定义java代码. * JSP 自定义标记提