10.模板优化之include标签

 

include标签

  1. 有些模版代码是重复的.所以能够单独抽取出来,之后哪里须要用到,就直接使用{% include '模版名称' %}来调用.
  2. 若是想要在include子模版的时候,传递一些参数,那么可使用with xxx=xxx的形式.示例代码以下:
    {% include 'header.html' with user='yan' %}

模板继承

在前端页面开发中。有些代码是须要重复使用的。这种状况可使用include标签来实现。也可使用另一个比较强大的方式来实现,那就是模版继承。模版继承相似于Python中的类,在父类中能够先定义好一些变量和方法,而后在子类中实现。模版继承也能够在父模版中先定义好一些子模版须要用到的代码,而后子模版直接继承就能够了。而且由于子模版确定有本身的不一样代码,所以能够在父模版中定义一个block接口,而后子模版再去实现。如下是父模版的代码:javascript

{% 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>
<li><a href="/">首页</a></li>
<li><a href="/blog/">博客</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>

这个模版,咱们取名叫作base.html,定义好一个简单的html骨架,而后定义好两个block接口,让子模版来根据具体需求来实现。子模板而后经过extends标签来实现,示例代码以下:css

{% 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 title%},若是想要使用父模版的title,那么能够在子模版的title block中使用{{ block.super }}来实现。html

在定义block的时候,除了在block开始的地方定义这个block的名字,还能够在block结束的时候定义名字。好比{% block title %}{% endblock title %}。这在大型模版中显得尤为有用,能让你快速的看到block包含在哪里。前端

相关文章
相关标签/搜索