- 论坛徽章:
- 0
|
本帖最后由 没够的Python 于 2014-01-20 17:50 编辑
第四章 Django模板系统
在前一章中,你可能已经注意到我们在例子视图中返回文本的方式有点特别。也就是说,HTML被硬性地直接写入Python代码之中。
这种处理会导致一些问题:
对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。
Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。设计人员和 HTML/CSS 编写人员都不应该通过编辑 Python 代码来完成自己的工作;他们应该处理的是 HTML。
同理,程序员编写 Python 代码和设计人员制作模板同时进行的工作方式效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python 又包含 HTML 的文件的编辑工作。
基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。
模板系统基本知识
模板系统基本知识
让我们深入分析一个简单的例子模板。该模板描述了一个向某个与公司签单人员致谢 HTML 页面。可将其视为一个格式信函:
<html>
<head><title>Ordering notice</title></head>
<body>
<p>Dear {{ person_name }},</p>
<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>
<p>Here are the items you've ordered:</p>
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}
<p>Your warranty information will be included in the packaging.</p>
{% endif %}
<p>Sincerely,<br />{{ company }}</p>
</body>
</html>
该模板是一段添加了些许变量和模板标签的基础 HTML 。让我们逐句过一遍:
用两个大括号括起来的文字(例如 {{ person_name }} )是 变量(variable) 。这意味着将按照给定的名字插入变量的值。如何指定变量的值呢?稍后就会说明。
被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即:仅通知模板系统完成某些工作的标签。
这个示例模板包含两个标签(tag): {% for item in item_list %} 标签(一个 for 标签) 和 {% if ordered_warranty %} 标签 (一个 if 标签)。
for 标签用于构建简单的循环,允许你遍历循环中的每一项。 if 标签,正如你所料,是用来执行逻辑判断的。在这个例子中标签检测 ordered_warranty 变量值是否为 True 。 如果是,模板系统将显示 {% if ordered_warranty %} 与 {% endif %} 之间的所有内容。 如果不是模板系统不会显示它。它当然也支持 {% else %} 以及其他多种逻辑判断方式。
最后,这个模板的第二段落有一个 filter 过滤器的例子,它能让你用来转换变量的输出, 在这个例子中, {{ship_date|date:"F j, Y" }} 将变量 ship_date 用 date 过滤器来转换,转换的参数是 "F j, Y" . date 过滤器根据指定的参数进行格式输出。过滤器是用管道字符( | )来调用的,就和Unix管道一样.
Django 模板含有很多内置的tags和filters,我们将陆续进行学习. 附录F列出了很多的tags和filters的列表,熟悉这些列表对你来说是个好建议. 学习完第十章,你就明白怎么去创建自己的filters和tags了.
如何使用模板系统
想要在Python代码中使用模板系统,只需遵循下面两个步骤:
可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象;
调用 Template 对象的 render() 方法并提供给他变量(i.e., 内容). 它将返回一个完整的模板字符串内容,包含了所有标签块与变量解析后的内容.
以下部分逐步的详细介绍
创建模板对象
创建一个 Template 对象最简单的方法就是直接实例化它。 Template 类就在 django.template 模块中,构造函数接受一个参数,原始模板代码。让我们深入挖掘一下 Python的解释器看看它是怎么工作的。
大家好
在本书中,我们喜欢用和Python解释器的交互来举例。 你可以通过三个> ( >>> ) 识别它们,它们相当于Python解释器的提示符。 如果你要拷贝例子,请不要拷贝这3个>字符。 |
|