Django模板继承导入 与自定义函数 - downtiser/python-one GitHub Wiki

模板继承用于让某一类型的模板能够继承母版的特定框架,当要对这些相同的结构框架进行修改时,只要对母版进行修改即可

  • 母版html:master.html
<!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>
  • 子版HTML:
{% extends 'master.html' %} <!--指明要继承的母版名-->

{% block title %}<title>tpl1</title>{% endblock %} <!--在特定的block内添加自定制内容-->

{% block content %}
    <span>tpl1</span>
{% endblock %}

{% block js %}
    <script>
        alert('tpl1')
    </script>
{% endblock %}

导入模板,当一些页面都要使用到某种组件时,可以将这个组件集成为一个小的模板,然后在其他模板中调用该模板即可,可以减少代码量

  • 组件模板:module.html
<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步骤:
  1. app下创建templatetags目录,目录名必须为此名
  2. 该目录下创建任意名字的python文件,例如myFunc.py
  3. 导入相应模块,注册自定义函数:
#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'
  1. Django的settings中注册相应的APP
  2. 要引用的模板头部load相应模块: {% load myFunc %}
  3. 调用相应函数并传参:{% foo 2 3 %}, 参数之间用若干空格分隔
  • 自定义filter,filter专门用于模板语言的if条件判断
  1. app下创建templatetags目录,目录名必须为此名
  2. 该目录下创建任意名字的python文件,例如myFunc.py
  3. 导入相应模块,注册自定义函数:
#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
  1. Django的settings中注册相应的APP
  2. 要引用的模板头部load相应模块: {% load myFunc %}
  3. 调用相应函数并传参:{{ "abc"|test:"123" }}, 管道符前是第一个参数,管道符后是函数名,冒号后要紧跟第二个参数
  • 两种自定义函数的优缺点:
    • simple_tag:可以传多个参数,限制较少,但不能参与if语句
    • filter:只能传两个参数,限制较多,但能参与if语句
⚠️ **GitHub.com Fallback** ⚠️