当前位置:编程学习 > 网站相关 >>

Django学习总结之四-模板

我们页面显示的html代码是直接编写在python代码中,因为对页面的设计修改工作要比python频繁的多,所以最好将页面设计工作和python代码分离,所以我们引用模板来实现这个功能。

一、模板实例

下面是一个模板的实例:


[python]
<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>
<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>
分析其中的一些元素:

(1)用大括号括起来的称作:变量,需要对它进行赋值

(2)用大括号和百分号括起来的是:模板标签,即通知模板系统完成某些工作的标签。上文中有两个模板标签:for和if分别实现循环和判断。

(3)第二段有个filter过滤器的使用:

{{ ship_date|date:"F j, Y" }
它是将变量ship_date传递给过滤器date,同时指定参数,过滤器按照参数输出。
二、使用模板

1、基本流程:

(1)用原始的模板代码创建一个Template对象

(2)创建一个Context对象,完成对模板对象中的变量赋值

(3)调用模板对象的render方法,将(2)步生成的context对象作为参数,填充模板,同时返回基于模板的展现字符串,这时其中的变量已经被替换。

实例:


[python] 
>>> from django import template 
>>> t = template.Template('My name is {{ name }}.') 
>>> c = template.Context({'name': 'Adrian'}) 
>>> print t.render(c) 
My name is Adrian. 
>>> c = template.Context({'name': 'Fred'}) 
>>> print t.render(c) 
My name is Fred. 

>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> c = template.Context({'name': 'Adrian'})
>>> print t.render(c)
My name is Adrian.
>>> c = template.Context({'name': 'Fred'})
>>> print t.render(c)
My name is Fred.
2、创建模板对象

转到mysite所在的目录,输入


[python]
python manage.py shell 

python manage.py shell
为什么我们运行pythonmanage.pyshell而不是python的。这两个命令都会启动交互解释器,但是manage.pyshell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用哪个设置文件。 Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。


[python] 
>>> from django import template 
>>> t = template.Template('My name is {{ name }}.') 
>>> print t 
<django.template.base.Template object at 0x0220EBD0> 

>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> print t
<django.template.base.Template object at 0x0220EBD0>每次创建一个template对象,打印出来的地址都不同。

3、模板渲染

即,对模板内的变量、标签赋值。

使用context来传递数据,一个context是一系列变量和他们的值的集合,然后用template的render方法传递context填充模板。


[python] 
>>> from django import template 
>>> t = template.Template('My name is {{ name }}.') 
>>> c = template.Context('name': 'Jim') 
>>> t.render(c) 
u'My name is Jim.' 

>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> c = template.Context('name': 'Jim')
>>> t.render(c)
u'My name is Jim.'
实例:


[python]
>>> from django.template import Template, Context 
>>> raw_template = """<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>
...
... {% 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>""" 
>>> t = Template(raw_template) 
>>> import datetime 
>>> c = Context({'person_name': 'John Smith', 
...     'company': 'Outdoor Equipment', 
...     'ship_date': datetime.date(2009, 4, 2), 
...     'ordered_warranty': False}) 
>>> t.render(c) 
u"<p>Dear John Smith,</p>\n\n<p>Thanks for placing an order from Outdoor 
Equipment. It's scheduled to\nship on April 2, 2009.</p>\n\n\n<p>You 
didn't order a warranty, so you're on your own when\nthe products 
inevitably stop working.</p>\n\n\n<p>Sincerely,<br />Outdoor Equipment 
</p>" 

>>> from django.template import Template, Context
>>> raw_template = """<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>
...
... {% if ordered_warranty %}
... <p>Your warranty information will be included in the packaging.</p>
... {% else %}
... <p>You didn't order a warranty, so

补充:Web开发 , Python ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,