6 模版渲染

模板是一个string文本,它用来分离一个文档的展现和数据,模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现,通常模板用来输出HTML。

让我们来看看一个简单的模板例子:

  1. <html>
  2. <head><title>Ordering notice</title></head>
  3. <body>
  4. <p>Dear {{ person_name }},</p>
  5. <p>Thanks for placing an order from {{ company|upper }}. It's scheduled to
  6. ship on {{ ship_date }}.</p>
  7. <p>Here are the items you've ordered:</p>
  8. <ul>
  9. {% for item in item_list %}
  10. <li>{{ item }}</li>
  11. {% endfor %}
  12. </ul>
  13. {% if ordered_warranty %}
  14. <p>Your warranty information will be included in the packaging.</p>
  15. {% endif %}
  16. <p>Sincerely,<br />{{ company }}</p>
  17. </body>
  18. </html>

这个模板本质上是HTML,但是夹杂了一些变量和模板标签:

1、用 {{}} 包围的是变量,如 {{person_name}},这表示把给定变量的值插入,如何指定这些变量的值我们即将说明

2、用 {%%} 包围的是块标签,如 {% if ordered_warranty %} 块标签的含义很丰富,它告诉模板系统做一些事情

在这个例子模板中包含两个块标签:

  • for 标签表现为一个简单的循环结构,让你按顺序遍历每条数据
  • if 标签则表现为逻辑的if语句

在这里,上面的标签检查 ordered_warranty 变量的值是否为 true。

如果是 true,模板系统会显示 {% if ordered_warranty %}{% endif %} 之间的内容,否则模板系统不会显示这些内容。

模板系统也支持 {%else%} 等其它逻辑语句。

3、上面还有一个过滤器的例子,过滤器是改变变量显示的方式

上面的例子中 {{ company|upper }} 把 company 变量传递给过滤器,upper 过滤器将 company 值大写。

类似于Unix,过滤器使用管道字符 |

模板支持多种内建的块标签,并且你可以写你自己的标签。