Py学习  »  Django

Django学习笔记(4):Django模板系统(中)

BeginMan • 12 年前 • 7835 次点击  

一、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. comments

模板引擎会忽略掉{%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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107
文章 [ 1 ]  |  最新文章 11 年前
415924556
Reply   •   1 楼
415924556    11 年前

你好,正在学习django 谢谢你 你的文章很有帮助 就是Django模板系统(上)这篇怎么没有呢