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在哪里

 

posted @ 2018-08-09 21:44  Nelsen_Chen  阅读(260)  评论(0编辑  收藏  举报