全书目录

第十四篇:Django 完全指南 —— 中央行政城区宇宙

第五章:Template —— 公文排版室与统一格式文件

1 分钟 364 字 第 279 / 962 个阅读单元

View 办完业务,不一定直接回纯文本。

大多数页面型项目,接下来会进入 Template,也就是公文排版室。

先做一个基础模板:

html
<!-- templates/base.html -->
<!doctype html>
<html lang="zh-Hans">
<head>
  <meta charset="utf-8">
  <title>{% block title %}中央行政城区{% endblock %}</title>
</head>
<body>
  <header>
    <h1>中央行政城区</h1>
    <nav>
      <a href="{% url 'permits:index' %}">许可证大厅</a>
    </nav>
  </header>

  <main>
    {% block content %}{% endblock %}
  </main>
</body>
</html>

列表页继承它:

html
<!-- templates/permits/index.html -->
{% extends "base.html" %}

{% block title %}许可证列表{% endblock %}

{% block content %}
  <h2>最新申请</h2>
  <ul>
    {% for permit in permits %}
      <li>
        <a href="{% url 'permits:detail' permit.pk %}">
          {{ permit.title }} - {{ permit.get_status_display }}
        </a>
      </li>
    {% empty %}
      <li>暂无申请</li>
    {% endfor %}
  </ul>
{% endblock %}

这就是 Django 模板最舒服的地方:

  • extends 做公文总版式
  • block 给子页面留空位
  • for / if 做轻逻辑展示
  • {% url %} 不硬编码路径
  • 自动 HTML 转义,默认更安全

模板继承关系图:

text
base.html
   │
   ├── permits/index.html
   ├── permits/detail.html
   └── registration/login.html

一条很硬的工程纪律:

模板负责展示,不负责做重业务计算。

不要在模板里堆复杂判断、数据库访问想象、巨型嵌套逻辑。公文排版室的职责,是把窗口已经准备好的内容排出来,不是替窗口重新办一遍事。

顺手再记一个事实:

  • Django 可以很好地渲染 HTML
  • 但 View 也可以完全不走模板,直接返回 JSON、文件、重定向

所以 Template 是强能力,不是强绑定。