Django模板渲染

模板渲染
一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个 context 是一
系列变量和它们值的集合。模板使用它来赋值模板变量标签和 执行块标签。
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.'

字典和 Contexts
Python 的字典数据类型就是关键字和它们值的一个映射。 Context 和字典很类似, Context
还提供更多的功能,请看第十章。
变量名必须由英文字符开始 (A-Z 或 a-z)并可以包含数字字符、下划线和小数点。 (小数
点在这里有特别的用途,稍后我们会讲到)变量是大小写敏感的。
下面是编写模板并渲染的示例:
>>> from django.template import Template, Context
>>> raw_template = """<p>Dear {{ person_name }},</p>
...
... <p>Thanks for ordering {{ product }} from {{ company }}. It's scheduled
... to ship on {{ ship_date|date:"F j, Y" }}.</p>
...
... {% if ordered_warranty %}
... <p>Your warranty information will be included in the packaging.</p>
... {% endif %}
...
... <p>Sincerely,<br />{{ company }}</p>"""
>>> t = Template(raw_template)
>>> import datetime
>>> c = Context({'person_name': 'John Smith',
...
'product': 'Super Lawn Mower',
...
'company': 'Outdoor Equipment',
...
'ship_date': datetime.date(2009, 4, 2),
...
'ordered_warranty': True})
>>> t.render(c)
"<p>Dear John Smith,</p>\n\n<p>Thanks for ordering Super Lawn Mower from
Outdoor Equipment. It's scheduled \nto ship on April 2, 2009.</p>\n\n\n
<p>Your warranty information will be included in the packaging.</p>\n\n\n
<p>Sincerely,<br />Outdoor Equipment</p>"
让我们逐句看看这段代码:
首先我们导入 (import)类 Template 和 Context ,它们都在模块 django.template 里。
我们把模板原始文本保存到变量 raw_template 。
注意到我们使用了三个引号来 标识这些文
本,因为这样可以包含多行。这是 Python 的一个语法。
接下来,
我们创建了一个模板对象 t , raw_template 作为 Template 类 的构造的参数。

我们从 Python 的标准库导入 datetime 模块,以后我们将会使用它。
57
http://djangobook.py3k.cn/
第四章 Django 模板系统
然后,我们创建一个 Context 对象, c 。 Context 构造的参数是 Python 字典数据类型,
在这里,我们给的参数是 person_name 值为 'John Smith' , product 值为 'Super Lawn
Mower' ,等等。
最后,我们在模板对象上调用 render() 方法,传递 context 参数给它。 这是返回渲染后
的模板的方法,它会替换模板变量为真实的值和执行块标签。
注意,
warranty paragraph 显示是因为 ordered_warranty 的值为 True . 注意时间的显示,
April 2, 2009 , 它是按 'F j, Y' 格式显示的。 (我们很快就会在 date 过滤器解释这些
格式)
如果你是 Python 初学者,你可能在想为什么输出里有回车换行的字符('\n' )而不是 显示回
车换行?因为这是 Python 交互解释器的缘故:调用 t.render(c) 返回字符串, 解释器缺省
显示这些字符串的 真实内容呈现 ,而不是打印这个变量的值。 要显示换行而不是 '\n' ,
使用 print 语句: print t.render(c) 。
这就是使用 Django 模板系统的基本规则:
写模板,
创建 Template 对象,
创建 Context , 调
用 render() 方法。


同一模板,多个上下文
一旦有了 模板 对象,你就可以通过它渲染多个背景(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
无论何时像这样使用同一模板源渲染多个背景,只创建 一次 模板 对象,然后对它多次调用
render() 将会更加高效。
# Bad
for name in ('John', 'Julie', 'Pat'):
t = Template('Hello, {{ name }}')
print t.render(Context({'name': name}))
# Good
t = Template('Hello, {{ name }}')
for name in ('John', 'Julie', 'Pat'):
print t.render(Context({'name': name}))
Django 模板解析非常快捷。
大部分的解析工作都是在后台通过对简短正则表达式一次性调用
来完成。这和基于 XML 的模板引擎形成鲜明对比,那些引擎承担了 XML 解析器的开销,且
往往比 Django 模板渲染引擎要慢上几个数量级。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值