社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

BeginMan • 13 年前 • 8449 次点击  

一、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 ]  |  最新文章 12 年前
415924556
Reply   •   1 楼
415924556    12 年前

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