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块的顺序随意 -->
Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版的更多相关文章
- Django模板语言的复用
一.include标签 由于在项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的,基于这个问题,我们可以采用模板语言复用include标签来帮我们解决,这样就避免 ...
- MyEclipse默认标签TODO,XXX,FIXME和自定义标签的使用
MyEclipse默认标签TODO,XXX,FIXME和自定义标签的使用 MyEclipse中的一些特殊的注释技术包括:1. // TODO —— 表示尚未完成的待办事项.2. // XX ...
- java_自定义标签,我的第一个自定义标签!
自定义标签,我的第一个自定义标签! 总共分两步 编写一个实现tag接口的java类,把jsp页面中的java代码移到这个类中,(标签处理器类) 编写标签库描述符(tld)文件,在tld文件中把标签处理 ...
- Eclipse默认标签TODO,XXX,FIXME和自定义标签[转]
http://www.blogjava.net/Guides/archive/2011/11/14/363686.html Eclipse中的一些特殊的注释技术包括: 1. // TO ...
- JSP标准标签库的安装以及自定义标签的创建
JSTL 库安装 Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip). 官方下载 ...
- Eclipse默认标签TODO,XXX,FIXME和自定义标签
1 TODO 表示需要实现,但目前还未实现的功能 2 XXX 勉强可以工作,但是需要改进的功能 3 FIXME 代码是错误的,不能工作,需要修复 4.自定义标签 window-->prefere ...
- [原创]java WEB学习笔记41:简单标签之带属性的自定义标签(输出指定文件,计算并输出两个数的最大值 demo)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- django第七天(模板的复用性,include标签和母版)
django第7天模板 include标签 模板的共用 a 模板需要到使用到 登陆界面 b 模板需要使用到 登陆界面 可以把登陆界面提取到公共的模板c 为什么要用: 都需要使用相同的界面,减少代码冗余 ...
- django -- 模版语言之过滤器Filters和for循环
前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }} 变量相关的 {% %} ...
随机推荐
- python+appium+PyCharm==自动化测试APP环境
1.点击SDK下面的uiautomatorviewer 2.启动夜神3.启动adb--->在cmd adb -version adb connect 127.0.0.1:62001 这里的配置环 ...
- 进入Linux单用户模式
1. 在启动系统出现如下画面时按Enter键进入系统设置页面: 2. 系统设置页面: 3. 按下e键进入: 4. 选择第二项,按e键进入 5. ...
- aop编程之后置通知,环绕通知和异常通知
---恢复内容开始--- 此将实例将在上一讲前置通知的基础上进行配置,前置配置内容:http://www.cnblogs.com/lihuibin/p/7955947.html 具体流程如下: 1. ...
- 20170918-00-(代理ip检验)
代码集编号 20170918-00 import random #随机数模块 import urllib.request #常用爬虫模块 import time from bs4 import Bea ...
- 类模板中的static关键字
特性: 1.从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员 2. 和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定 ...
- MySql获取两个日期间的时间差
[1]MySql 语言获取两个日期间的时间差 DATEDIFF 函数可以获得两个日期之间的时间差.但是,这个函数得出的结果是天数. 需要直接获取秒数可使用TIMESTAMPDIFF函数.应用示例如下: ...
- edis配置文件-转
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb ...
- 什么是Satoshi?和比特币中本聪有什么关系?
Satoshi Nakamoto(中本聪)是发起比特币和原始比特币客户端创建者.不过,我经常听到“Satoshi ”这个词,好像它是一个货币单位. 什么是Satoshi呢?Satoshi是0.0000 ...
- jenkins3
Jenkins是基于java开发的. GitHub Git (熟练使用) Doocker (了解) Jenkins (熟练使用) Django (熟练使用) Angularjs (了解) Sentry ...
- JustOj 1032: 习题6.7 完数
题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是"完数". 编程序找出N之内的所有完数, ...