Django----模板

时间:2023-03-09 09:09:18
Django----模板

为了将html页面和python代码分离开来,有必要介绍一下模板的作用,Django中自带很多模板。

以下一个html模板文件:

<html>
<head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1> <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>
{% else %}
<p>You didn't order a warranty, so you're on your own when
the products inevitably stop working.</p>
{% endif %} <p>Sincerely,<br />{{ company }}</p> </body>
</html>

能够看到这个html文件和一般的html文件有点不同,它多了一些不是html的标签,比方{{person_name}},{%for item in item_list%}

逐一介绍一下

用两个大括号括起来的文字(比如 {{ person_name }} )称为 变量(variable) 。这意味着在此处插入指定变量的值。

被大括号和百分号包围的文本(比如 {% if ordered_warranty %} )是 模板标签(template
tag)
 。标签(tag)定义比較明白,即: 仅通知模板系统完毕某些工作的标签。

这个样例中的模板包括一个for标签( {% for item in item_list %} )和一个if 标签({% if ordered_warranty %} )

for标签类似Python的for语句,可让你循环訪问序列里的每个项目。 if 标签,正如你所料,是用来运行逻辑推断的。
在这里,tag标签检查ordered_warranty值是否为True。假设是,模板系统将显示{% if ordered_warranty %}和{% else %}之间的内容;否则将显示{% else %}和{% endif %}之间的内容。{% else %}是可选的。

最后,这个模板的第二段中有一个关于filter过滤器的样例,它是一种最便捷的转换变量输出格式的方式。
如这个样例中的{{ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同一时候指定參数”F j,Y”。date过滤器依据參数进行格式输出。 过滤器是用管道符(|)来调用的。

怎样使用模板呢?

1、创建模板对象

最简单的创建模板的方法就是直接实例化一个模板对象

t=Template('My name is {{name}}')

2、传递一个Context

c=Context('name':Zhu);

3、调用模板对象的render方法

t.render(c);

输出:u 'My name is Zhu'

这就是模板的使用的基本思路:写模板,创建模板,创建Context,调用render方法。同一时候一旦一个模板已经创建好了,就可一用它来渲染多个Context。也就是说一个模板,多个上下文。而且一次创建多次渲染的方式会显得更加的高效。

注:Django
模板解析很快捷。 大部分的解析工作都是在后台通过对简短正則表達式一次性调用来完毕。 这和基于 XML 的模板引擎形成鲜明对照,那些引擎承担了 XML 解析器的开销,且往往比 Django 模板渲染引擎要慢上几个数量级。