一.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模板语言的复用的更多相关文章

  1. Django模板语言(常用语法规则)

    Django模板语言 The Django template language 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签 ...

  2. django框架基础-django模板语言-长期维护

    ##################     常用的模板语言       ####################### # django的模板语言, # # 只需要记两种特殊符号: # # {{ } ...

  3. Django模板语言初识

    一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  4. Django模板语言相关内容 Djan

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  5. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  6. Django 模板语言 路由 视图

    . 模板语言(字符串替换) . 母版和继承 . 什么时候用母版? html页面有重复的代码,把它们提取出来放到一个单独的html文件. (比如:导航条和左侧菜单) . 子页面如何使用母版? {% ex ...

  7. django模板语言的注释

    就像HTML或者Python,Django模板语言同样提供代码注释. 注释使用 {# #} : ? 1 {# This is a comment #} 注释的内容不会在模板渲染时输出. 用这种语法的注 ...

  8. Django模板语言与视图(view)

    常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...

  9. 10:django 模板语言

    Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个 ...

随机推荐

  1. 【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. ...

  2. 4.8cf自训

    发现cf以前的好题真的很多.. cf 730j 01背包变形 感觉很好的题 /* 先处理出最少需要t个瓶子 dp[i][j][k]前i个取k个,容量为j时的水的体积 滚动数组搞一下 本题的状态转移必须 ...

  3. bzoj 2301

    一道莫比乌斯反演入门题. 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要 ...

  4. Android定位元素与操作

    一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Ins ...

  5. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  6. WBXML 1.3协议摘要

    协议地址:WAP195   网络字节顺序:big-endian.   为什么要加0x40? 参考:Compressing XML When an element contains content (t ...

  7. python—命名规范

    文件名全小写,可使用下划线 包应该是简短的.小写的名字.如果下划线可以改善可读性可以加入.如mypackage. 模块与包的规范同.如mymodule. 类总是使用首字母大写单词串.如MyClass. ...

  8. ID3算法下的决策树

    网上的内容感觉又多又乱,自己写一篇决策树算法.希望对别人有所启发,对自己也是一种进步. 决策树 须知概念 信息熵 & 信息增益 熵: 熵(entropy)指的是体系的混乱的程度,在不同的学科中 ...

  9. linux服务器性能——CPU、内存、流量、磁盘使用率的监控

    https://blog.csdn.net/u012859748/article/details/72731080

  10. JS 中 ~~符号

    它被用作一个更快的替代 Math.floor() . 参考:http://rocha.la/JavaScript-bitwise-operators-in-practice