Django模板语言的复用
一.include标签
由于在项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的,基于这个问题,我们可以采用模板语言复用include标签来帮我们解决,这样就避免了大量的复制粘贴html页面版块代码。
如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字(接口),在有该版块的页面中 中直接导入即可。
语法:{% 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>
二.inclusion_tag自定义标签
出现的问题:多个页面有一个相似的页面版块,不是完全相同的版块,版块内的细节不是完全一致的。
解决:可以采用模板语言复用,自定义inclusion_tag标签来帮助我们解决这个问题,为了减少代码的冗余。
运用:
1.先封装相似的页面标签结果,为数据不同而且页面标签个数不同的地方采用Django模板语言写活(数据决定了最终标签个数)。
2.自定义inclusion_tag,将封装的页面文件都给inclusion_tag装饰器,自定义的函数的参数为不同的数据,函数的返回值就是用关键词形式将参数传回。
3.在拥有该相似版块的页面中导入自定义tag,并使用tag传入具体实参即可。
自定义inclusion_tag:
app/templatetags/my_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>
三.母版
出现的问题:多个页面的多个版块相同或相似,只有少部分版块是自己独有的,将共有的部分全部提出封装,包含了页面大部分版块结构,所以我们称之为母版。
解决:
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>
继承母版的login页面:
{% extends 'base.html' %} {% block style %}
<link rel="stylesheet" href="/static/css/login.css">
{% endblock %} {% block own %}
<div class="login">登录页面独有的登录板块</div>
{% endblock %}
Django模板语言的复用的更多相关文章
- Django模板语言(常用语法规则)
Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...
- django框架基础-django模板语言-长期维护
################## 常用的模板语言 ####################### # django的模板语言, # # 只需要记两种特殊符号: # # {{ } ...
- Django模板语言初识
一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...
- Django模板语言相关内容 Djan
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django——模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- Django 模板语言 路由 视图
. 模板语言(字符串替换) . 母版和继承 . 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) . 子页面如何使用母版? {% ex ...
- django模板语言的注释
就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : ? 1 {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注 ...
- Django模板语言与视图(view)
常用语法 {{ }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...
- 10:django 模板语言
Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个 ...
随机推荐
- 【python】python版本升级2.6.6到2.7.3(CentOS release 6.2)
一. 升级python到2.7.3 wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz tar -zxvf Python-2.7. ...
- 4.8cf自训
发现cf以前的好题真的很多.. cf 730j 01背包变形 感觉很好的题 /* 先处理出最少需要t个瓶子 dp[i][j][k]前i个取k个,容量为j时的水的体积 滚动数组搞一下 本题的状态转移必须 ...
- bzoj 2301
一道莫比乌斯反演入门题. 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要 ...
- Android定位元素与操作
一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Ins ...
- 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...
- WBXML 1.3协议摘要
协议地址:WAP195 网络字节顺序:big-endian. 为什么要加0x40? 参考:Compressing XML When an element contains content (t ...
- python—命名规范
文件名全小写,可使用下划线 包应该是简短的.小写的名字.如果下划线可以改善可读性可以加入.如mypackage. 模块与包的规范同.如mymodule. 类总是使用首字母大写单词串.如MyClass. ...
- ID3算法下的决策树
网上的内容感觉又多又乱,自己写一篇决策树算法.希望对别人有所启发,对自己也是一种进步. 决策树 须知概念 信息熵 & 信息增益 熵: 熵(entropy)指的是体系的混乱的程度,在不同的学科中 ...
- linux服务器性能——CPU、内存、流量、磁盘使用率的监控
https://blog.csdn.net/u012859748/article/details/72731080
- JS 中 ~~符号
它被用作一个更快的替代 Math.floor() . 参考:http://rocha.la/JavaScript-bitwise-operators-in-practice