一、模板渲染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 解决此类问题的首选方法是使用更加简洁的策略—— 模板继承。