模板继承用于让某一类型的模板能够继承母版的特定框架,当要对这些相同的结构框架进行修改时,只要对母版进行修改即可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}{% endblock %} <!--用模板语言的block设置要继承的结构区域-->
{% block css %}{% endblock %}
</head>
<body>
<h3 style="color: #436aff">后台管理页面</h3>
{% block content %}{% endblock %}
{% block js %}{% endblock %}
</body>
</html>
{% extends 'master.html' %} <!--指明要继承的母版名-->
{% block title %}<title>tpl1</title>{% endblock %} <!--在特定的block内添加自定制内容-->
{% block content %}
<span>tpl1</span>
{% endblock %}
{% block js %}
<script>
alert('tpl1')
</script>
{% endblock %}
导入模板,当一些页面都要使用到某种组件时,可以将这个组件集成为一个小的模板,然后在其他模板中调用该模板即可,可以减少代码量
<div>
<form>
<input type="text" placeholder="user name">
<input type="submit" value="submit">
</form>
</div>
- 引用组件:
{% include 'module.html' %}
模板语言提供了有限的一些方法使用,如果要实现复杂的渲染,需要自定义函数: 包括两种,自定义simple_tag, 自定义filter
- simple_tag类似于一般的函数,自定义simple_tag步骤:
- app下创建templatetags目录,目录名必须为此名
- 该目录下创建任意名字的python文件,例如
myFunc.py
- 导入相应模块,注册自定义函数:
#Downtiser
from django import template
from django.utils.safestring import mark_safe
register = template.Library() #注册器,变量名必须为register
@register.simple_tag #用注册器下的simple_tag装饰器注册自定义函数
def foo(a, b):
return a + b
@register.simple_tag
def bar(a):
if a > 5:
return 'abc'
else:
return 'def'
- Django的settings中注册相应的APP
- 要引用的模板头部load相应模块:
{% load myFunc %}
- 调用相应函数并传参:
{% foo 2 3 %}
, 参数之间用若干空格分隔
- 自定义filter,filter专门用于模板语言的if条件判断
- app下创建templatetags目录,目录名必须为此名
- 该目录下创建任意名字的python文件,例如
myFunc.py
- 导入相应模块,注册自定义函数:
#Downtiser
from django import template
from django.utils.safestring import mark_safe
register = template.Library() #注册器,变量名必须为register
@register.simple_tag #用注册器下的filter装饰器注册自定义函数
def test(a, b): #注意filter最多只能接受2个参数
return a + b
- Django的settings中注册相应的APP
- 要引用的模板头部load相应模块:
{% load myFunc %}
- 调用相应函数并传参:
{{ "abc"|test:"123" }}
, 管道符前是第一个参数,管道符后是函数名,冒号后要紧跟第二个参数
- 两种自定义函数的优缺点:
- simple_tag:可以传多个参数,限制较少,但不能参与if语句
- filter:只能传两个参数,限制较多,但能参与if语句