django開發系列:模板結構優化

django開發系列:模板結構優化

include方法:

  1. 有些模版代碼是重複的。因此可以單獨抽取出來,以後哪裏需要用到,就直接使用include進來就可以了。
  2. 如果想要在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包含在哪裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章