django学习系列之模板系统篇(一)
2014-02-12 17:57
316 查看
首先,解释一下django的模板。
模板就是MTV模式中的Template。在我看来,模板用来定义html文档的,当然这只是狭义的说法。
一个模板包含区块标签和变量。
区块标签简单说就是标记。比如说一个区块标签可以生成内容,可以作为一个控制结构,可以获取数据库内容,或者访问其他的模板标签。
还是太抽象,举例说明就容易懂了。
区块标签被{%和%}包含:
是不是有点似懂非懂?不急,等下详细解释。
变量是在模板里用来输出值的标记。变量标签被{{和}}包含。
比如,Myname is {{ name }}.具体输出什么就看name变量的值是什么了。
对于变量,还可以使用过滤器filters。
比如说这一句,<p>It'sscheduled to ship on {{ ship_date|date:"F j, Y" }}.</p>。
{{ ship_date|date:"F j, Y"}}将变量ship_date用date过滤器来转换,转换的参数是”Fj,
Y”,即是date过滤器根据指定的参数格式输出。
用法:过滤器是用管道字符(| )来调用的。
还有一个重量级人物:context。上面是怎么将{{name
}}替换成'Michael'的呢?靠的就是context。Context是传递给模板的名称与值的映射。
前面说到模板用来定义html文档的,怎么将模板转换成html呢?渲染。
渲染通过从context获取值来替换模板中的变量并执行所有的区块标签。
这下逻辑是不是清晰一点了?接下来说明模板系统。
模板系统就是很多模板的意思。废话,那就说模板系统的用法。
使用模板系统的步骤:
1.创建模板对象:创建一个Template对象,可以用代码或者指定路径;
2.模板渲染:调用Template对象的render()方法并提供给他变量的值。
这样它就会返回一个完整的模板字符串内容,包含了所有标签块与变量解析后的内容。
下面先给一个交互式示例,打开pythonshell:
>>> fromdjango.template import Context, Template
>>> t =Template("My name is {{ name }}.") #创建模板对象
>>> c =Context({"name": "Michael"}) #创建上下文对象
>>>t.render(c) #渲染模板
'My name isMichael.'
在文件里怎么用呢?打开你的views.py文件,添加代码:
跟前面一样,只是多了一个HttpResponse,它表示应答http请求。
接着主要讲一些基本的模板标签和过滤器的用法。
模板标签
1.if/else
这个不详细讲,只讲要注意的地方:
1)在每个{%if %}标签的结尾都要有{%endif
%}结束。
2){%if %}标签接受and,or或者not来对多个变量做判断,但不允许在同一个标签中同时使用and和or。例如:
{% if A and B%} #正确
{% if A and B orC %} #错误
3)不支持用圆括号来组合比较操作。
2.for
用法示例:
不解释,一看就明白。
补充:
1)django不支持退出循环,也不支持continue语句。
2){%for %}标签有一个特殊的forloop模板变量,这个变量能提供一些额外的信息:
forloop.counter执行次数的计数器,从1开始。
forloop.counter0跟forloop.counter类似,不过从0开始。
forloop.revcounter表示循环中剩余项,结束项被置1。
forloop.revcounte0跟forloop.revcounter类似,不过结束项被置0。
forloop.first布尔值,在第一次循环时为True。
forloop.last布尔值,在最后一次循环时为True,一个常见的用法是在一系列链接之间放置管道符。
比如,{%for link in links %}{{ link }}{% if not forloop.last %} | {% endif%}{% endfor %}
输出可能是这样:Link1| Link2 | Link3 | Link4
forloop.parentloop是一个指向当前循环的上一级循环的forloop对象的引用(在嵌套循环的情况下)。
最后提醒一下,forloop变量只能在循环中使用。
3.ifequal/ifnotequal
跟if标签类似。
顺便提一下,在模板里面注释使用{#这里就是注释#}。
过滤器
用法:{{variable | filter1 | filter2}}
从上面可以看出,过滤器可以串联,就是一个过滤器的输出可以再被下一个过滤器过滤。
有些过滤器有参数,参数总是使用双引号引着。
这里给出一些常用的过滤器:
1.addslashes :
添加反斜杠到任何反斜杠、单引号或者双引号前面。这在处理包含
JavaScript的文本时是非常有用的。
2.date :
按指定的格式字符串参数格式化date或者datetime对象。
比如:{{ pub_date|date:"F j, Y" }}
3.escape :
转义&符号,引号,<,>符号。这在确保用户提交的数据是有效的XML或XHTML
时是非常有用的。具体上,escape做下面这些转换:
转换&到&
转换<到<
转换>到>
转换" (双引号)到"
转换' (单引号)到'
4.length :
返回变量的长度。你可以对列表或者字符串,或者任何知道怎么测定长度的Python
对象使用这个方法(也就是说,有__len__()方法的对象)。
模板就是MTV模式中的Template。在我看来,模板用来定义html文档的,当然这只是狭义的说法。
一个模板包含区块标签和变量。
区块标签简单说就是标记。比如说一个区块标签可以生成内容,可以作为一个控制结构,可以获取数据库内容,或者访问其他的模板标签。
还是太抽象,举例说明就容易懂了。
区块标签被{%和%}包含:
{% if is_logged_in %} Thanks for logging in! {% else %} Please log in. {% endif %}
是不是有点似懂非懂?不急,等下详细解释。
变量是在模板里用来输出值的标记。变量标签被{{和}}包含。
比如,Myname is {{ name }}.具体输出什么就看name变量的值是什么了。
对于变量,还可以使用过滤器filters。
比如说这一句,<p>It'sscheduled to ship on {{ ship_date|date:"F j, Y" }}.</p>。
{{ ship_date|date:"F j, Y"}}将变量ship_date用date过滤器来转换,转换的参数是”Fj,
Y”,即是date过滤器根据指定的参数格式输出。
用法:过滤器是用管道字符(| )来调用的。
还有一个重量级人物:context。上面是怎么将{{name
}}替换成'Michael'的呢?靠的就是context。Context是传递给模板的名称与值的映射。
前面说到模板用来定义html文档的,怎么将模板转换成html呢?渲染。
渲染通过从context获取值来替换模板中的变量并执行所有的区块标签。
这下逻辑是不是清晰一点了?接下来说明模板系统。
模板系统就是很多模板的意思。废话,那就说模板系统的用法。
使用模板系统的步骤:
1.创建模板对象:创建一个Template对象,可以用代码或者指定路径;
2.模板渲染:调用Template对象的render()方法并提供给他变量的值。
这样它就会返回一个完整的模板字符串内容,包含了所有标签块与变量解析后的内容。
下面先给一个交互式示例,打开pythonshell:
>>> fromdjango.template import Context, Template
>>> t =Template("My name is {{ name }}.") #创建模板对象
>>> c =Context({"name": "Michael"}) #创建上下文对象
>>>t.render(c) #渲染模板
'My name isMichael.'
在文件里怎么用呢?打开你的views.py文件,添加代码:
fromdjango.template import Template, Context from django.httpimport HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() t = Template("<html><body>It is now {{ current_date}}.</body></html>") html = t.render(Context({'current_date': now})) return HttpResponse(html)
跟前面一样,只是多了一个HttpResponse,它表示应答http请求。
接着主要讲一些基本的模板标签和过滤器的用法。
模板标签
1.if/else
这个不详细讲,只讲要注意的地方:
1)在每个{%if %}标签的结尾都要有{%endif
%}结束。
2){%if %}标签接受and,or或者not来对多个变量做判断,但不允许在同一个标签中同时使用and和or。例如:
{% if A and B%} #正确
{% if A and B orC %} #错误
3)不支持用圆括号来组合比较操作。
2.for
用法示例:
{% for item inlist %} <p>{{forloop.counter }}: {{ item }}</p> {% endfor %}
不解释,一看就明白。
补充:
1)django不支持退出循环,也不支持continue语句。
2){%for %}标签有一个特殊的forloop模板变量,这个变量能提供一些额外的信息:
forloop.counter执行次数的计数器,从1开始。
forloop.counter0跟forloop.counter类似,不过从0开始。
forloop.revcounter表示循环中剩余项,结束项被置1。
forloop.revcounte0跟forloop.revcounter类似,不过结束项被置0。
forloop.first布尔值,在第一次循环时为True。
forloop.last布尔值,在最后一次循环时为True,一个常见的用法是在一系列链接之间放置管道符。
比如,{%for link in links %}{{ link }}{% if not forloop.last %} | {% endif%}{% endfor %}
输出可能是这样:Link1| Link2 | Link3 | Link4
forloop.parentloop是一个指向当前循环的上一级循环的forloop对象的引用(在嵌套循环的情况下)。
最后提醒一下,forloop变量只能在循环中使用。
3.ifequal/ifnotequal
跟if标签类似。
顺便提一下,在模板里面注释使用{#这里就是注释#}。
过滤器
用法:{{variable | filter1 | filter2}}
从上面可以看出,过滤器可以串联,就是一个过滤器的输出可以再被下一个过滤器过滤。
有些过滤器有参数,参数总是使用双引号引着。
这里给出一些常用的过滤器:
1.addslashes :
添加反斜杠到任何反斜杠、单引号或者双引号前面。这在处理包含
JavaScript的文本时是非常有用的。
2.date :
按指定的格式字符串参数格式化date或者datetime对象。
比如:{{ pub_date|date:"F j, Y" }}
3.escape :
转义&符号,引号,<,>符号。这在确保用户提交的数据是有效的XML或XHTML
时是非常有用的。具体上,escape做下面这些转换:
转换&到&
转换<到<
转换>到>
转换" (双引号)到"
转换' (单引号)到'
4.length :
返回变量的长度。你可以对列表或者字符串,或者任何知道怎么测定长度的Python
对象使用这个方法(也就是说,有__len__()方法的对象)。
相关文章推荐
- Django学习系列之模板系统
- django学习系列之模板系统篇(二)
- (转)Django ====> 实战学习篇五 模板系统说明
- The Definitive Guide To Django 2 学习笔记(五) 第四章 模板 (一)基本模板系统
- Django学习笔记(5):Django模板系统(下)
- The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统
- django学习之模板系统
- Django学习系列之路由系统
- python学习笔记--Django入门二 Django 的模板系统
- Django学习系列之模板
- django系列 4:模板引擎
- VM Depot 镜像新增系列II – 学习管理系统,内容管理系统以及平台管理工具
- Django学习系列之ORM-QuerySetAPI
- Django学习笔记1 [路由机制,数据库orm,模板语言]
- Django系列学习之二
- Django 模板(Template)系统
- [C++再学习系列] 函数模板和类模板
- Django模板系统(非常详细)
- EF(Entity Framework)系统学习系列
- 第四章 Django模板系统