'''前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字(接口),在有该版块的页面中直接导入即可语法:{% include '版块页面的路径' %}'''
公共的页面版块
公告页面版块的样式
/* static/css/public.css *//* 该样式文件是为公告页面代码块提供页面布局的css样式 */.public { /* 具体的css样式块 */}
使用公告版块的页面们
first { % include 'public.html' %}
second { % include 'public.html' %}
'''link导入静态的css样式include标签导入静态的html页面'''
'''前提:与include标签出现的页面需求很类似,但是这些不是完全相同的版块,因为版块内的细节不是完全一致如何运用:1. 先封装相似的页面标签结构,为数据不同且页面标签个数也不同的地方采用Django模版语言写活(数据决定了最终标签个数)2. 自定义inclusion_tag,将封装的页面文件丢给inclusion_tag装饰器,自定义的函数的参数为不同的数据,函数的返回值就是用关键词形式将参数返回3. 在拥有该相似版块的页面中导入自定义tag,并使用自定义tag传入具体实参即可'''
公共类似的页面版块
- { % for foo in list %}
- { { foo }} { % endfor %}
自定义inclusion_tag
# app/templatetags/owen_tags.pyfrom django.template import Libraryregister = Library()@register.inclusion_tag('public_tag.html')def header_list(list): return { 'list': list}
使用公告版块的页面们
first_tag { % load owen_tags %}{ % with [1, 2, 3, 4, 5] as list %} { % header_list list %}{ % endwith %}
second_tag { % load owen_tags %}{ % with [10, 30, 50] as list %} { % header_list list %}{ % endwith %}
'''前提:多个页面的多个版块相同或相似,只有少部分版块是自己独有的,将共有的部分全部提出封装,因为包含了页面大部分版块结构,所以我们称呼其为 母版如何运用:1. 先封装母版:大部分版块相同或相似的base.html,在特定的位置留出相应的block接口2. 每个需要运用母版页面的页面来继承母版 {% extends '母版页面的路径' %}3. 在自己页面中的任意位置书写block中自身独有的页面内容 { {% block block名 %} ... {% endblock %}}4. 如果需要继承母版block中原有的内容,使用 { { block.super }} 来获取'''
公共的母版页面
{ { title }} { % block style %} { # 为继承该母版的页面引入自身样式文件通过的block #} {% endblock %} { % block own %} { # 为继承该母版的页面提供书写自己页面独有内容的block #}{% endblock %}
页面样式文件均放在static/css中,每个html文件按需导入自己的css文件
/* static/css/base.css *//* static/css/login.css *//* static/css/register.css */
继承母版的login页面
{% extends 'base.html' %}{ % block style %} { % endblock %}{ % block own %}{ { block.super }} { # 继承该母版的block中原有的内容 #}登录页面独有的登录版块{ % endblock %}
继承母版的register页面
{% extends 'base.html' %}{ % block own %}注册页面独有的注册版块{ % endblock %}{ % block style %} { % endblock %}