千与千寻django(三)---django的模板系统
2013-03-22 00:08
323 查看
概述
上次的运行的第一个web可谓是诸多缺点啊
页面的每次修改都需要改变python代码
python的构架应该是mvc设计啊呀
这样把html代码和逻辑业务代码柔在一起不便于维护啥的
于是乎:django的模板系统就出现了
变量:用{{}}包围的是变量,如{{person_name}},表示变量的插入像jsp中的el表达式
模板标签:{%%}包围的是块标签,如{%if ordered_warranty%} ,模板变量表示丰富,可以告诉模板系统做一些事情
过滤器:{{ship_date|date:"F j, Y"}}把ship_date变量传递给过滤器
并给date过滤器传递了一个参数“F j, Y”,date过滤器以给定参数的形式格式化日期
step2:使用一些给定变量context(模板使用它来得到变量的值)调用Template对象的render()(context调用Template对象的render()方法来填充模板)方法
TEMPLATE_DIRS=(
'F:/work/javaWork/mysite/templates/',
)
其控制代码为
url配置为: (r'^templates/$',templates),
好了我们运行一下吧
结果正是我们期待的
呵呵,功能真强大啊,不过有好多需要注意的地方
1.配置模板的位置一定要注意
2.还有个简单的控制函数直接返回了:render_to_response() 一般比较常用哦亲
败.
2.方法调用仅仅在它没有参数时起作用
1.if/else
{% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值
系统则会显示{% if %}和{% endif %}间的所有内容
{% if %}标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
确认使用{% endif %}来关闭{% if %}标签
2.for
{% for %}标签允许你按顺序遍历一个序列中的各个元素
Python的for语句语法为for X in Y,X是用来遍历Y的变量
每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
例如,显示给定athlete_list变量来显示athlete列表
系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
类似的,系统也不支持continue语句
{% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
一,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:
二,forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
三,forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
四,forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
五,forloop.first当第一次循环时值为True,在特别情况下很有用:
六,forloop.last当最后一次循环时值为True
七,forloop.parentloop在嵌套循环中表示父循环的forloop:
八,forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
3.ifequal/ifnotequal
{% ifequal %}比较两个值,如果相等,则显示{% ifequal %}和{% endifequal %}之间的所有内容
4.过滤器
模板过滤器是变量显示前转换它们的值的方式
eg:{{ sex|lower }}
这将显示通过lower过滤器过滤后{{ name }}变量的值,它将文本转换成小写
使用(|)管道来申请一个过滤器
过滤器可以串成链,即一个过滤器的结果可以传向下一个
有些过滤器需要参数,需要参数的过滤器的样子:{{ bio|truncatewords:"30" }}
这将显示bio标量的前30个字,过滤器参数一直使用双引号
上次的运行的第一个web可谓是诸多缺点啊
页面的每次修改都需要改变python代码
python的构架应该是mvc设计啊呀
这样把html代码和逻辑业务代码柔在一起不便于维护啥的
于是乎:django的模板系统就出现了
模板系统的基本知识
首先呢我们先看下一个模板的例子<html> <head><title>Ordering notice</title></head> <body> <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> {% endif %} <p>Sincerely,<br />{{ company }}</p> </body> </html>其实就是一个html页面,中间夹杂了一些变量和模板标签
变量:用{{}}包围的是变量,如{{person_name}},表示变量的插入像jsp中的el表达式
模板标签:{%%}包围的是块标签,如{%if ordered_warranty%} ,模板变量表示丰富,可以告诉模板系统做一些事情
过滤器:{{ship_date|date:"F j, Y"}}把ship_date变量传递给过滤器
并给date过滤器传递了一个参数“F j, Y”,date过滤器以给定参数的形式格式化日期
使用模板系统
step1:用模板代码创建一个Template对象step2:使用一些给定变量context(模板使用它来得到变量的值)调用Template对象的render()(context调用Template对象的render()方法来填充模板)方法
模板的载入
你可以直接以读取文件的形式来读取html模板所在的位置,显然那样并不优雅,django为我们解决了,在settings.py文件中你可以利用这个TEMPLATE_DIRS来指定模板的位置TEMPLATE_DIRS=(
'F:/work/javaWork/mysite/templates/',
)
其控制代码为
from django.http import HttpResponse import datetime from django.template.context import Context from django.template.loader import get_template ''' Created on 2013-3-21 @author: Senssic ''' def helloword(request): str="hello word" return HttpResponse(str) def templates(request): t=get_template("helloword.html") c=Context({'person_name': 'senssic', 'product': 'person', 'company': 'senssiccmopenty', 'ship_date': datetime.date(2013, 3, 21), 'ordered_warranty': True }) html=t.render(c) return HttpResponse(html)
url配置为: (r'^templates/$',templates),
好了我们运行一下吧
结果正是我们期待的
呵呵,功能真强大啊,不过有好多需要注意的地方
1.配置模板的位置一定要注意
2.还有个简单的控制函数直接返回了:render_to_response() 一般比较常用哦亲
def helloword(request): return render_to_response('helloword.html',{'person_name': 'senssic', 'product': 'person', 'company': 'senssiccmopenty', 'ship_date': datetime.date(2013, 3, 21), 'ordered_warranty': True })
模板需要注意的地方
关于方法调用
1.在方法查询的时候,如果一个方法触发了异常,这个异常会传递从而导致渲染失败.
2.方法调用仅仅在它没有参数时起作用
模板标签和过滤器基础
1.if/else
{% if %}标签计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值
系统则会显示{% if %}和{% endif %}间的所有内容
{% if %}标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
确认使用{% endif %}来关闭{% if %}标签
2.for
{% for %}标签允许你按顺序遍历一个序列中的各个元素
Python的for语句语法为for X in Y,X是用来遍历Y的变量
每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
例如,显示给定athlete_list变量来显示athlete列表
系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
类似的,系统也不支持continue语句
{% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
一,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:
二,forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
三,forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
四,forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
五,forloop.first当第一次循环时值为True,在特别情况下很有用:
六,forloop.last当最后一次循环时值为True
七,forloop.parentloop在嵌套循环中表示父循环的forloop:
八,forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
3.ifequal/ifnotequal
{% ifequal %}比较两个值,如果相等,则显示{% ifequal %}和{% endifequal %}之间的所有内容
4.过滤器
模板过滤器是变量显示前转换它们的值的方式
eg:{{ sex|lower }}
这将显示通过lower过滤器过滤后{{ name }}变量的值,它将文本转换成小写
使用(|)管道来申请一个过滤器
过滤器可以串成链,即一个过滤器的结果可以传向下一个
有些过滤器需要参数,需要参数的过滤器的样子:{{ bio|truncatewords:"30" }}
这将显示bio标量的前30个字,过滤器参数一直使用双引号
相关文章推荐
- 如何在django中使用mako模板系统
- 初学动态网页——Django模板系统
- [Django模板系统]如何使用Django模板系统
- Django模板系统
- [Django模板系统]用locals()传递变量到模板
- (转)Django ====> 实战学习篇五 模板系统说明
- Django模板系统——过滤器
- Django模板系统——过滤器
- The Django Book【第4章 Django模板系统】
- The Django Book:第4章 Django模板系统
- Django之路由、模板和模型系统 (转载)
- Django 模板(Template)系统
- Django模板系统——过滤器
- 在python中应用Django的模板系统
- django学习之模板系统
- [Django模板系统]在模板中加载css/js等静态文件
- Django之路由、模板和模型系统
- Django模板系统(上)
- 这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下
- Django模板系统(非常详细)