Django DTL 模板系统的局限与理念。
以下内容来源于 Django 1.8 LTS 全解
现在,你已经大致了解了 Django Template Language(DTL),或许该说明一下背后的设计理念了。首先要知
道,DTL 的局限是故意为之的。
Django 发端于在线新闻站点,其特点是大容量、变化频繁。最初设计 Django 的人对 DTL 有非常明确的理念
预设。
如今,这些理念仍然是 Django 的核心。它们是:
1. 表现与逻辑分离
2. 避免重复
3. 与 HTML 解耦
4. XML 不好
5. 不要求具备设计能力
6. 透明处理空格
7. 不重造一门编程语言
8. 确保安全有保障
9. 可扩展
下面分述各点。
1. 表现与逻辑分离
模板系统用于控制表现及与其相关的逻辑,仅此而已。超出这一基本目标的功能都不应该支持。
2. 避免重复
大多数动态网站都使用某种全站通用的设计,例如通用的页头、页脚、导航栏,等等。Django 模板系
统应该为此提供便利的方式,把这些元素存储在一个位置,减少重复的代码。模板继承背后就是这个
理念。
3. 与 HTML 解耦
模板系统不应该只能输出 HTML,还要能够生成其他基于文本的格式(也就是纯文本)。
4. XML 不应该作为模板语言
如果使用 XML 引擎解析模板,编辑模板时可能引入大量人为错误,而且处理模板有很多额外消耗。
5. 不要求具备设计能力
模板系统不应该必须在 WYSIWYG 编辑器(如 Dreamweaver)中才能写出。这样有太多局限,句法不
够灵活。
Django 的目标是让模板编写人员能直接编辑 HTML。
6. 透明处理空格
模板系统不应该特殊处理空格。模板中的空格就是空格,要像文本那样显示出来。不在模板标签中的
空格都应该显示。
7. 不重造一门编程语言
模板系统一定不能允许:
- 为变量赋值
- 编写高级的逻辑
也就是不能重造一门编程语言。模板系统的目标是提供适量的编程功能,例如分支和循环,足够做表
现相关的判断就行。
Django 模板系统知道模板最常由设计师编写,而不是程序员,因此不要求具备 Python 知识。
8. 安全保障
模板系统默认应该禁止包含恶意代码,例如删除数据库记录的命令。这是模板系统不允许随意使用
Python 代码的另一个原因。
9. 可扩展
模板系统应该认识到,高级模板编写人员可能想扩展功能。这是自定义模板标签和过滤器背后的理
念。
这些年我用过很多不同的模板系统,这种设计方式真心让我喜欢。DTL 以及它的设计方式是 Django 框架的主要优势之一。
在紧张的工作节奏中,设计师和程序员积极沟通,力求在截止日期之前完成工作,此时 Django 不会充当拦路
虎,能让各个团队关注自己擅长做的事。
一旦你在实践中认识到这一点,很快就能理解为什么 Django 是“为快节奏完美主义者而生的框架”。
虽然如此,但是 Django 是灵活的,它不要求你必须使用 DTL。与 Web 应用的其他组件一样,模板句法具有
高度主观性,程序员对此有不同的观点。单单 Python 一门语言就有几十种开源的模板语言,由此可见一斑。
每出现一种新的模板语言,就说明现有模板语言不能满足开发者的需求。
Django 力求成为全栈 Web 框架,为了提升 Web 开发者的工作效率,提供了完整的组件,因此多数时候,使用 DTL 更为便利,但这绝非严格要求。