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循环
前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }} 变量相关的 {% %} ...
随机推荐
- Java中通过Class类获取Class对象的方法详解
方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码 ...
- Nginx配置文件具体配置解释
Nginx配置文件具体配置解释 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错 ...
- [15]Windows内核情景分析 --- 权限管理
Windows系统是支持多用户的.每个文件可以设置一个访问控制表(即ACL),在ACL中规定每个用户.每个组对该文件的访问权限.不过,只有Ntfs文件系统中的文件才支持ACL. (Ntfs文件系统中, ...
- html5-文本属性
/*p{color: red;width: 50%;text-align: center;background: blue;}p{text-align: end;}p{text-align: end; ...
- 开源IOT平台
用于IoT应用程序开发的10大开源软件: 1. DeviceHive DeviceHive基于AllJoyn的Data Art设备,同时也是AllSeen的联盟成员.这一款免费开源机器和机器通信(M2 ...
- 20155228 实验四 Android开发基础
20155228 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握An ...
- asp.net web form 的缺点
与mvc相比,web form 的缺点: 代码架构麻烦. 以页面或控件为单位,把逻辑放在了一起,代码架构简单.平铺直叙,修改.维护比较麻烦. 不方便单元测试. 功能堆加在了一起,不方便对单个的功能进 ...
- eclipse xml 文件添加注解快捷键
eclipse xml 文件注解快捷键: <!-- --> Ctrl + shift + / 添加注解 Ctrl + shift + \ 取消注解
- 常用bash,autoUserAdd.sh
#!/bin/bash # auth: xiluhua # date: -- read -p "please input a username:" username [ -z $u ...
- 74.Java异常处理机制
package testDate; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IO ...