1. 程式人生 > 其它 >Pycharm開發Django專案模版結構優化

Pycharm開發Django專案模版結構優化

模版結構優化

引入模版

有時候一些程式碼是在許多模版中都用到的。如果我們每次都重複的去拷貝程式碼那肯定不符合專案的規範。一般我們可以把這些重複性的程式碼抽取出來,就類似於Python中的函式一樣,以後想要使用這些程式碼的時候,就通過include包含進來。這個標籤就是include。示例程式碼如下:

# header.html
<p>我是header</p>

# footer.html
<p>我是footer</p>

# main.html
{% include 'header.html' %}
<p>我是main內容</p>
{% include 'footer.html' %}

include標籤尋找路徑的方式。也是跟render渲染模板的函式是一樣的。

預設include標籤包含模版,會自動的使用主模版中的上下文,也即可以自動的使用主模版中的變數。如果想傳入一些其他的引數,那麼可以使用with語句。示例程式碼如下:

# header.html
<p>使用者名稱:{{ username }}</p>

# main.html
{% include "header.html" with username='huangyong' %}

模板繼承:

在前端頁面開發中。有些程式碼是需要重複使用的。這種情況可以使用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包含在哪裡。