新手指南:如何設計接案者與發包者的 django 頁面模板

更新日期: 2024 年 12 月 19 日

本文為 Django 一鍵切換使用者身分教學,第 4 篇

  1. Django 如何設計一鍵切換使用者角色的模型
  2. Django 用者角色管理與路徑設計
  3. 動態角色管理:設計簡潔統一的 /users/ 路徑
  4. 新手指南:如何設計接案者與發包者的 django 頁面模板 👈 所在位置
  5. 新手指南:Django 模板為什麼不能多重繼承?

在構建接案平台時,接案者和發包者的功能需求往往有所不同,但又存在某些相似的部分。

設計一套清晰、靈活的模板結構,能讓代碼更易於維護和擴展。

本文將帶您了解如何根據頁面內容和邏輯,選擇適當的模板設計方案,並提供分離與合併模板的建議及範例。


合併與分離模板的比較

合併模板的優缺點

優點

  • 減少模板數量,便於統一管理。
  • 節省模板切換的代碼,例如 Django 的多次 render 調用。
  • 共享視覺元素(如導航欄)更簡單。

缺點

  • 當接案者與發包者的頁面差異較大時,模板中的條件判斷(如 {% if ... %})會增加代碼複雜度。
  • 修改某一角色的專屬功能時,可能影響另一角色的代碼,增加維護難度。

分離模板的優缺點

優點

  • 每個角色擁有專屬模板,代碼清晰,便於針對性修改。
  • 更適合角色間功能和邏輯差異較大的場景。

缺點

  • 可能增加模板數量,帶來一些初期的管理成本。
  • 部分重複結構需進一步抽取成共享部分(例如基礎框架模板)。

哪種方式適合您?

  • 若接案者與發包者的頁面結構高度相似(例如僅主內容區不同),可考慮合併模板,並使用條件渲染。
  • 若頁面功能差異較大,則建議分為兩個模板,並將共享部分抽取為基礎模板。

接案者與發包者頁面內容設計

接案者的頁面內容

  • 個人資料:展示姓名、技能、經驗、簡歷等。
  • 接案進度:列出接案中的專案(專案名稱、狀態、報酬)。
  • 評價與回饋:顯示發包者對接案者的評價。
  • 通知:包括專案邀請、訊息通知等。
  • 財務管理:如收入統計與提款記錄。

發包者的頁面內容

  • 個人資料:包括姓名、聯絡方式、公司資訊等。
  • 發包進度:列出發包中的專案(專案名稱、狀態、負責接案者)。
  • 專案管理:功能如新增專案、編輯專案。
  • 評價與回饋:對接案者的評價管理。
  • 財務管理:支付紀錄與專案預算管理。

視覺化設計範例

共用框架

+--------------------------------------------+
|                  頁面標題                   |
+--------------------------------------------+
| [左側導航欄]         |     [主內容區域]     |
|-----------------------|----------------------|
| - 個人資料            |                      |
| - 發包進度(發包者)  |                      |
| - 接案進度(接案者)  |                      |
| - 評價與回饋          |                      |
| - 財務管理            |                      |
|-----------------------|----------------------|

接案者專用頁面

+--------------------------------------------+
|                  接案者主控台               |
+--------------------------------------------+
| [左側導航欄]         |     [主內容區域]     |
|-----------------------|----------------------|
| - 個人資料            | - 我的專案          |
| - 接案進度            |   - 專案名稱        |
| - 評價與回饋          |   - 狀態:進行中     |
| - 財務管理            |   - 報酬:$1000     |
|                       |                      |
|                       | - 通知訊息          |
+-----------------------+----------------------+

發包者專用頁面

+--------------------------------------------+
|                  發包者主控台               |
+--------------------------------------------+
| [左側導航欄]         |     [主內容區域]     |
|-----------------------|----------------------|
| - 個人資料            | - 我的專案          |
| - 發包進度            |   - 專案名稱        |
| - 評價與回饋          |   - 狀態:進行中     |
| - 財務管理            |   - 負責人:接案者A |
|                       |                      |
|                       | - 新增專案按鈕      |
+-----------------------+----------------------+

模板結構建議

使用共享的 base.html

抽取共享的頁面結構(如標題、導航欄)到基礎模板中,提升模板的可復用性。

範例:base.html

<!DOCTYPE html>
<html>
<head>
    <title>接案平台</title>
</head>
<body>
    <header>
        <h1>接案平台</h1>
    </header>
    <aside>
        <ul>
            <li><a href="#">個人資料</a></li>
            <li><a href="#">進度管理</a></li>
            <li><a href="#">評價與回饋</a></li>
            <li><a href="#">財務管理</a></li>
        </ul>
    </aside>
    <main>
        {% block content %}
        {% endblock %}
    </main>
</body>
</html>

為角色創建專屬模板

每個角色的模板繼承自 base.html,僅需填充主內容部分。

範例:freelancer_dashboard.html

{% extends 'base.html' %}
{% block content %}
<h2>接案進度</h2>
<ul>
    <li>專案名稱:專案A,狀態:進行中</li>
    <li>專案名稱:專案B,狀態:已完成</li>
</ul>
<h2>通知</h2>
<p>您有新的專案邀請!</p>
{% endblock %}

範例:client_dashboard.html

{% extends 'base.html' %}
{% block content %}
<h2>發包進度</h2>
<ul>
    <li>專案名稱:專案X,負責人:接案者A</li>
    <li>專案名稱:專案Y,負責人:接案者B</li>
</ul>
<h2>新增專案</h2>
<button>新增專案</button>
{% endblock %}

總結

  1. 合併模板適用於頁面結構高度相似的情況,可簡化代碼數量,但需謹慎處理條件渲染。
  2. 分離模板更適合邏輯和功能差異大的場景,能夠提升代碼清晰度與可維護性。
  3. 通過共用基礎模板(如 base.html),有效減少重複代碼,並提升整體結構的可擴展性。

無論選擇哪種方案,關鍵是根據實際需求平衡代碼的簡潔性與靈活性,為未來的維護和擴展做好準備。

Similar Posts