Django 第六课 【模板继承】
在前端页面开发中,有些代码是需要重复使用的。这种情况可以使用 ’include‘ 标签来实现。也可以使用另外一个比较强大的方式来实现,那就是模板继承。模板继承类似于 ’python‘ 中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现,模板继承也可以在父模板中先定义好一些子模板需要用到的代码。然后子模板直接继承就可以了,并且因为子模板肯定有自己不同的代码,因此可以在父模板中定义一个block接口,然后在子模板再去实现,以下是父模板的代码:
{% load static %} <! DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href= "{% static 'style.css' %}"/> <title>{% block title %}我的站点{% endblock %}</title> </head> <body> <div id="sidebar"> {% block sidebar %} <ul> {% endblock %} </div> <div id="content"> {% block content %} {% endblock %} </div> </body>
这个模板,我们取名叫做 ’base.html‘ ,定义好一个简单的 ’html‘ 骨架,然后定义好俩个 ’block‘接口,让子模板来根据具体需求来实现。子模板然后通过 ’extends‘ 标签来实现,示例代码如下:
{% extends "base.html" %} {% block title %} 博客列表 {% endblock %} {% block content %} {% for entry in blog_entries %} <h2> {{ entry.title }} </h2> <p> {{ entry.body}} </p> {% endfor %} {% endblock %}
需要注意的是:extends 标签必须放在模板的第一行。
子模板中的代码必须放在block中,否则将不会被渲染
如果在某个 ’block‘ 中需要使用父模板的内容,那么可以使用 ’{{block.super}}‘来继承,比如上列子, ’{% block titkle %}‘,如果想使用父模板的 ’title‘,那么可以在子模板的 ’title block‘ 中使用 ’{{ block.super }}‘
在定义 ’block‘ 的时候,除了在 ’block‘ 开始的地方定义这个 ’block‘ 的名字, 还可以在 ’block‘ 结束的时候定义名字, 比如 ’{% block title %} {% endblock title %}‘ 。这在大型模板中显得尤其有用,能让你快速的看到block在哪里