现在你已经对 Django 的模板语言有一些认识了,我们将指出一些特意设置的限制和为什么要这样做 背后的一些设计哲学。
相对与其他的网络应用的组件,模板的语法很具主观性,因此可供程序员的选择方案也很广泛。事实上,Python 有成十上百的开放源码的模板语言实现。每个实现都是因为开发者认为现存的模板语言不够用。(事实上,对一个 Python 开发者来说,写一个自己的模板语言就象是某种“成人礼”一样! 如果你还没有完成一个自己的模板语言,好好考虑写一个,这是一个非常有趣的锻炼。)
明白了这个,你也许有兴趣知道事实上 Django 并不强制要求你必须使用它的模板语言。因为 Django 虽然被设计成一个 FULL-Stack 的 Web 框架,它提供了开发者所必需的所有组件,而且在大多数情况 使用 Django 模板系统会比其他的 Python 模板库要 更方便 一点,但是并不是严格要求你必须使用它。你将在后续的章节中看到,你还可以非常容易地在 Django 中使用其他的模板语言。
虽然如此,很明显,我们对 Django 模板语言的工作方式有着强烈的偏爱。这个模板语言来源于 World Online 的开发经验和 Django 创造者们集体智慧的结晶。下面是关于它的一些设计哲学理念:
业务逻辑应该和表现逻辑相对分开。我们将模板系统视为控制表现及表现相关逻辑的工具,仅此而已。模板系统不应提供超出此基本目标的功能。出于这个原因,在 Django 模板中是不可能直接调用 Python 代码的。所有的编程工作基本上都被局限于模板标签的能力范围。当然,是 有可能写出自定义的模板标签来完成任意工作,但这些“超范围”的 Django 模板标签有意地不允许执行任何 Python 代码。语法不应受到 HTML/XML 的束缚。尽管 Django 模板系统主要用于生成 HTML,它还是被有意地设计为可生成非 HTML 格式,如纯文本。 一些其它的模板语言是基于 XML 的,将所有的模板逻辑置于 XML 标签与属性之中,而 Django 有意地避开了这种限制。强制要求使用有效 XML 编写模板将会引发大量的人为错误和难以理解的错误信息,而且使用 XML 引擎解析模板也会导致令人无法容忍的模板处理开销。假定设计师精通 HTML 编码 。模板系统的设计意图并不是为了让模板一定能够很好地显示在 Dreamweaver 这样的所见即所得编辑器中。这种限制过于苛刻,而且会使得语法不能像目前这样的完美。Django 要求模板创作人员对直接编辑 HTML 非常熟悉。假定设计师不是 Python 程序员。模板系统开发人员认为:模板通常由设计师而非程序员来编写,因此不应被假定拥有 Python开发知识。当然,系统同样也特意地提供了对那些 由 Python 程序员进行模板制作的小型团队的支持。它提供了一种工作模式,允许通过编写原生 Python 代码进行系统语法拓展。目标并不是要发明一种编程语言。目标是恰到好处地提供如分支和循环这一类编程式功能,这是进行与表现相关判断的基础。
你现在已经掌握了模板系统的基本知识。接下来呢?
时下大多数网站都是数据库驱动的:网站的内容都是存储在关系型数据库中。这使得数据和逻辑能够彻底地分开(视图和模板也以同样方式对逻辑和显示进行了分隔。)
下一章将讲述如何与数据库打交道。