Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26314743
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-05-11 17:01:19

目标:将页面的设计和Python的代码分离 懂HTML的人不需要去了解Python语法。反之也这样!
模板基本知识:
 
Django 模板是用于分割文档的表示(presentation)和数据(data)的字符串文本。模板定义了占位符(placeholders)和各种定义文档应该如何显示的基本逻辑(即模板标签template tag)。通常,模板用来生成 HTML,但是 Ddjango 模板同样能够生成任何基于文本的格式。{模板中包含了if 之类的标签哦}
模板示例:

Ordering notice

Dear {{ person_name }},

    {
用两个大括号括起来的文字(例如 {{ person_name }} )是 变量(variable)

Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.


Here are the items you've ordered:



    {% for item in item_list %}
  • {{ item }}

  • {% endfor %}

{% if ordered_warranty %}

Your warranty information will be included in the packaging.


{% endif %}

Sincerely,
{{ company }}




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

借鉴下JAVA中的模板标签进来!

如何使用模板系统?

想要在Python代码中使用模板系统,只需遵循下面两个步骤:

1.                 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式创建来 Template 对象;

2.                 调用 Template 对象的 render() 方法并提供给他变量(i.e., 内容). 它将返回一个完整的模板字符串内容,包含了所有标签块与变量解析后的内容.

 python manage.py shell  命令可以在命令行进行调试Django的哦

模板渲染

一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。模板使用它来赋值模板变量标签和 执行块标签。contextDjango里表现为 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 和字典很类似, Conetxt 还提供更多的功能,请看第十章。

{当我们的模板中有多个变量与标签的时候这个时候就要用到Context字典类型了}

c = Context({'person_name': 'John Smith',

...     'product': 'Super Lawn Mower',

...     'company': 'Outdoor Equipment',

...     'ship_date': datetime.date(2009, 4, 2),

...     'ordered_warranty': True})

定义多个模板元素然后一一进行赋值处理!

这就是使用Django模板系统的基本规则:写模板,创建 Template 对象,创建 Context  调用 render() 方法。

看看这样写模板渲染哦!

>>> from django.template import Template, Context

>>> person = {'name': 'Sally', 'age': '43'}

>>> t = Template('{{ person.name.upper }} is {{ person.age }} years old.')

>>> c = Context({'person': person})

>>> t.render(c)

'SALLY is 43 years old.'

可以定义好一个字典类型的变量person然后在后面直接调用字典中的某个属性出来的。然后当要做渲染的时候就直接应用这个字典类型的变量进来就OK了!类似地也可以自定义一个类哦。然后在模板渲染的时候就可以直接调用其中的属性出来了。

如何处理无效变量?

  当我们在写变量名如果是无效的话如何处理呢?

>>> from django.template import Template, Context

>>> t = Template('Your name is {{ name }}.')

>>> t.render(Context())

'Your name is .'

>>> t.render(Context({'var': 'hello'}))  #无效的变量名

'Your name is .' #空值出来

玩一玩上下文(context)对象

   多数时间,你可以通过传递一个完全填充(full populated)的字典给 Context() 来初始化 上下文(Context)  但是初始化以后,你也可以从``上下文(Context)`` 对象添加或者删除条目,使用标准的Python字典语法(syntax):

c = Context({"foo": "bar"})  #用一个字典初始化Context()变量

同时可以通过变更处理它的!

c['foo']  #字典类型可以取KEY得到VALUES

'bar'

>>> del c['foo']  #删除掉KEY值





阅读(890) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

hkebao2009-07-10 12:47:02

从现在开始努力关注Django框架 http://www.javaeye.com/topic/405150 整理相关的资料