题记:写这篇博客要主是加深自己对模板循环的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。
一、Django模板的组织式形
在上一节中说的签标、模板变量,或许还没一个抽象的定义。这一节侧重学习Django模板系统置内的模板签标和过滤器。首先看这个例子:
1 <html> 2 <head><title>标题</title></head> 3 <body> 4 <p>Dear {{ person_name }},</p> 5 <p>Thanks for placing an order from {{ company }}. It's scheduled to 6 ship on {{ ship_date|date:"F j, Y" }}.</p> 7 <p>Here are the items you've ordered:</p> 8 <ul> 9 {% for item in item_list %} 10 <li>{{ item }}</li> 11 {% endfor %} 12 </ul> 13 {% if ordered_warranty %} 14 <p>Your warranty information will be included in the packaging.</p> 15 {% endif %} 16 <p>Sincerely,<br />{{ company }}</p> 17 </body> 18 </html>
其中:{%xxx%}是模板签标;{{eee}}是模板变量,{{eee|jjj:...}}是过滤器式形
Django模板是一个string本文,它用来离分一个文档的现展和据数模板定义了placeholder和表现多种逻辑的tags来划定文档如何现展平日模板用来输出HTML,但是Django模板也能生成其它基于本文的式形
二、经常使用的模板签标
1.if/else
1 {%if today_is_weekend%} 2 <p>Welcome~</p> 3 {%else%} 4 <p>NO!</p> 5 {%endif%}
Python的值真:
空列表[]、空元祖()、空字典{}、空字符串"",零0、None 都为假
其他都是值真
{% if %}还可以与and、or、not起一应用,判断一个或多个变量,或者取反(not)
注意:
1.不允许同时应用and、or
2.不持支圆括号来组合比拟操纵
3.没有{%elif%}签标
4.个一每{%if%}签标要对应{%endif%}(间中没空格)关闭签标,否则django会抛出TemplateSyntaxError。
2.for
1 <ul> 2 {%for person in Person_list%} 3 <li>{{person.name}}</li> 4 {%endfor%} 5 </ul>
曾经辉煌过,曾经凋零过,这可是你至死不渝的生活吗?我亲爱的母亲—大自然。多少次,我伏在地上,去聆听你沉重的脉搏声;多少次,我伫立在山前,去感受那松涛千年的浩瀚。你的豪壮,足以让中华民族腾飞;你的无私,谱写了一曲曲感人至深的千古壮曲。
注意:
1.我们也够能套嵌for
2.Django不持支退出循环,不持支continue
3.{%for%}签标置内了一个forloop模板变量,它含有一些性属供提循环的信息:
1.forloop.counter表现循环的次数,它从1开始计数,第一次循环设为1 2.forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0 3.forloop.revcounter表现循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1 4.forloop.revcounter0类似于forloop.revcounter,但它是表现的数量少一个,即最后一次循环时设为0 5.orloop.first当第一次循环时值为True,在特殊情况下很用有: ---------------------------------------------------------------------------- {% for object in objects %} {% if forloop.first %}<li class="first">{% else %}<li>{% endif %} {{ object }} </li> {% endfor %} ---------------------------------------------------------------------------- 6.forloop.last当最后一次循环时值为True 7.forloop.parentloop在套嵌循环中表现父循环的forloop:
3.ifequal/ifnotequal
{% ifequal %}比拟两个值,如果相称,则示显{% ifequal %}和{% endifequal %}之间的有所容内:
1 {% ifequal a b %} 2 <h1>Welcome!a and b</h1> 3 {% endifequal %}
注意:
1.{% ifequal %}签标持支{% else %},这一点不再累述
2.strings,integers和小数都可以作为{% ifequal %}的参数
3.其它的Python类型,如字典、列表或booleans不能硬码编在{% ifequal %}里面
4.如果你需要测试某个变量是true或false,用{% if %}即可
4.block
定义了一个被子模块覆盖的区块,在模板继承知识点可深入
5.comment
模板引擎会忽略掉{%comment%}...{%endcomment%}之间的容内
6.extends
标记当前模板扩展一个父模板
其他的模板签标可以在以后的章节中详细学习,也可在django 官方文档中查阅。
三、模板注释
Django模板语言允许注释{# #},模板渲染时注释不会输出,一个注释不能分成多行
1 {# This is a comment #}
四、过滤器
1.过滤器简介:
(1):模板过滤器是变量示显前转换它们的值的方式,通过 (|)管道来申请一个过滤器,如姓名转换成小写:
1 {{ name|lower }}
(2):过滤器可以串成链,即一个过滤器的结果可以传向下一个
1 {{ my_text|escape|linebreaks }}
(3):有些过滤器需要参数,过滤器参数一直应用双引号,如示显bio标量的前30个字,
1 {{ bio|truncatewords:"30" }}
2.经常使用的过滤器
这里我推荐二篇博文,里面讲解十分详细:
http://doudoubear11.blog.163.com/blog/static/301262432011618103643135/
http://blog.csdn.net/yima1006/article/details/7201199
文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!