django 模板系统

来源:互联网 发布:b2b2c 商城app源码 编辑:程序博客网 时间:2024/05/19 18:16

一、模板渲染context

1.1 简单介绍

context在Django里表现为Context 类,在 django.template 模块里。 它构造是有一个可选参数:一个字典映射变量和它
们的值。调用Template 对象 的 render() 方法并传递context来填充模板:

>>> from django.template import Context, Template
>>> t = Template("My name is {{ name }}.")
>>> c = Context({"name": "Stephane"})
>>> t.render(c)
'My name is Stephane.'   

注意:>>>表示的是在python的交互式下,下面的例子也是

1.2 同一模板,多个上下文

一旦有了模板 对象,你就可以通过它渲染多个背景(context),例如:

>>> from django.template import Template, Context
>>> t = Template('Hello, {{ name }}')
>>> print t.render(Context({'name': 'John'}))
Hello, John
>>> print t.render(Context({'name': 'Julie'}))
Hello, Julie
>>> print t.render(Context({'name': 'Pat'}))
Hello, Pat

1.3 背景变量的查找

所有的字典的键值、属性、索引和对象的方法,都是通过点(.)来访问,如

>>> from django.template import Template, Context
>>> person = {'name': 'Sally', 'age': '43'}
>>> t = Template('{{ person.name }} is {{ person.age }} years old.')
>>> c = Context({'person': person})
>>> t.render(c)
'Sally is 43 years old.'

同样,也可以通过句点来访问对象的属性。比方说, Python 的datetime.date 对象有 year 、 month 和 day 几个属性,
你同样可以在模板中使用句点来访问这些属性:
>>> from django.template import Template, Context
>>> import datetime
>>> d = datetime.date(1993, 5, 2)
>>> d.year
1993
>>> d.month
5
>>> d.day
2
>>> t = Template('The month is {{ date.month }} and the year is {{ date.year }}.')
>>> c = Context({'date': d})
>>> t.render(c)
'The month is 5 and the year is 1993.'

最后,句点也可用于访问列表索引,例如:

>>> from django.template import Template, Context
>>> t = Template('Item 2 is {{ items.2 }}.')
>>> c = Context({'items': ['apples', 'bananas', 'carrots']})
>>> t.render(c)
'Item 2 is carrots.'


二、基本模板标签和过滤器

2.1 if/else

{% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% else %}
<p>Get back to work.</p>
{% endif %}

2.2 for

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>

2.3 ifequal/ifnotequal

{% ifequal %} 标签比较两个值

{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}


三、其他函数

render_to_response()

locals() 技巧

get_template()中使用子目录

include 模板标签


四、模板继承

在整个网站中,如何减少共用页面区域(比如站点导航)所引起的重复和冗余代码?解决该问题的传统做法是使用服务器端的 includes ,你可以在 HTML 页面中使用该指令将一个网页嵌入到另一个中。事实上,Django 通过刚才讲述的{% include %} 支持了这种方法。但是用 Django 解决此类问题的首选方法是使用更加简洁的策略—— 模板继承。

0 0