django開發系列:模板結構優化
include方法:
- 有些模版代碼是重複的。因此可以單獨抽取出來,以後哪裏需要用到,就直接使用
include
進來就可以了。 - 如果想要在
include
子模版的時候,傳遞一些參數,那麼可以使用with xxx=xxx
的形式。示例代碼如下:
{% include 'header.html' with username='zhiliao' %}
模版繼承:
在前端頁面開發中。有些代碼是需要重複使用的。這種情況可以使用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>
<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
標籤來實現,示例代碼如下:
{% 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 }}
來實現。
在定義block
的時候,除了在block
開始的地方定義這個block
的名字,還可以在block
結束的時候定義名字。比如{% block title %}{% endblock title %}
。這在大型模版中顯得尤其有用,能讓你快速的看到block
包含在哪裏。