标签

下面的部分概述了常见的Django标签。

if/else

{%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子:

{% if today_is_weekend %}<p>Welcome to the weekend!</p>
{% endif %}An {% else %} tag is optional:
{% if today_is_weekend %}<p>Welcome to the weekend!</p>
{% else %}<p>Get back to work.</p>
{% endif %}

{%if%} 标签接受 and,or,not来测试多变量,参考下面的例子:

{% if athlete_list and coach_list %}Both athletes and coaches are available.
{% endif %}
{% if not athlete_list %}There are no athletes.
{% endif %}
{% if athlete_list or coach_list %}There are some athletes or some coaches.
{% endif %}
{% if not athlete_list or coach_list %}There are no athletes or there are some coaches.
{% endif %}
{% if athlete_list and not coach_list %}There are some athletes and absolutely no coaches.
{% endif %}

{%if%}标签不接受and和or同时出现在一个标签语句中,因为这样会引起歧义。例如:

{% if athlete_list and coach_list or cheerleader_list %}

括号在这里不支持的,如果你有需要,可以考虑将逻辑放在模板的外层,并将指定的模板变量作为结果传出来。或者嵌套{%if%}标签:

{% if athlete_list %}{% if coach_list or cheerleader_list %}We have athletes, and either coaches or cheerleaders!{% endif %}
{% endif %}

多次使用同一操作符是可以的,但同时使用多个不同的操作符是不可以的。下面的语句是有效的:

{% if athlete_list or coach_list or parent_list or teacher_list %}

没有{%elif%}标签,用嵌套的{%if%}标签来完成同样的是事情:

{% if athlete_list %}<p>Here are the athletes: {{ athlete_list }}.</p>
{% else %}<p>No athletes are available.</p>{% if coach_list %}<p>Here are the coaches: {{ coach_list }}.</p>{% endif %}
{% endif %}

确保每个{%if%}对应一个{%endif%},否则Django将会抛出一个TemplateSyntaxError 的异常。

for

{%for%}允许你对一个序列中的每一项进行循环,格式是 for X in Y,Y是用来遍历的集合,X是变量名。每次循环,模板系统都会将{%for%}跟{%endfor%}中内容展现出来。

例如:

<ul>{% for athlete in athlete_list %}<li>{{ athlete.name }}</li>{% endfor %}
</ul>

还可以对集合进行反转遍历:

{% for athlete in athlete_list reversed %}
...
{% endfor %}

还可以进行嵌套:

{% for athlete in athlete_list %}<h1>{{ athlete.name }}</h1><ul>{% for sport in athlete.sports_played %}<li>{{ sport }}</li>{% endfor %}</ul>
{% endfor %}

常用的一个模式是在循环遍历之前检查List的大小,如果List为空则输出一些特殊的文本

{% if athlete_list %}
{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% endfor %}
{% else %}
<p>There are no athletes. Only computer programmers.</p>
{% endif %}

因为这个方法太过常用,for标签支持一个可选的{%Empty%}的选项让你定义输出自定义的文本。例如:

{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% empty %}
<p>There are no athletes. Only computer programmers.</p>
{% endfor %}

注意,for标签不支持break,countinue。

在{%for%}标签中,你可以访问forloop变量,该变量有几个常用的属性:

1.forloop.counter:用于记录循环了多少次

2.forloop.counter0:类似forloop.counter0,只不过是从0开始的。

3.forloop.revcounter:用于记录还未被遍历的项目数

4.forloop.revcounter0:类似revcounter,不过计数是从0开始

5.forloop.first:布尔值,用来标识是否为第一个项目

6.forloop.last:布尔值,用来表示是否为最后一个项目

ifequal/ifnotequal

{%ifequal%} 标签比较两个值,如果他们相等的话,显示在{%ifequal%} 和{%endifequal%}之间的所有代码。

{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}

参数可以是硬编码,所以下面的例子都是有效的:

{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% endifequal %}

{% ifequal section "community" %}
<h1>Community</h1>
{% endifequal %}

跟{%if%}类似,the {%ifequal%}标签也支持选项{%else%}

{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}

只有模板变量、字符、整型,和浮点型可以作为对比参数,下面是一些有效的例子:

{% ifequal variable 1 %}
{% ifequal variable 1.23 %}
{% ifequal variable 'foo' %}
{% ifequal variable "foo" %}

其他类型如List、字典、布尔类型的都不可以作为{%ifequal%}的参数。

{% ifequal variable True %}
{% ifequal variable [1, 2, 3] %}
{% ifequal variable {'key': 'value'} %}

这些是无效的参数。如果你要测试某些东西是否为True或False,用{%ifequal%}

注释

使用{##},多行注释则使用{%comment%}和{%endcoomment%}

过滤器

模板过滤是在显示他们之前变更变量值的最简单的方法。如:{{name|lower}},这会先将name的值变为小写,然后再显示出来。

过滤器是可以多个接连使用的:

{{ my_list|first|upper }}

The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器...相关推荐

  1. Django内建模版标签和过滤器

    第四章列出了许多的常用内建模板标签和过滤器.然而,Django自带了更多的内建模板标签及过滤器.这章附录列出了截止到编写本书时,Django所包含的各个内建模板标签和过滤器,但是,新的标签是会被定期地 ...

  2. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)--创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  3. django系统学习笔记

    转自:http://hi.baidu.com/derris/item/7ca6013e330563fede2221ab 2010-02-07 00:12 django系统学习笔记--(1)hello ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 原文: Int ...

  5. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  6. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  7. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

    <繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...

  8. 机器学习理论《统计学习方法》学习笔记:第六章 逻辑斯谛回归与最大熵模型

    机器学习理论<统计学习方法>学习笔记:第六章 逻辑斯谛回归与最大熵模型 6 逻辑斯谛回归与最大熵模型 6.1 逻辑斯谛回归模型 6.1.1 逻辑斯谛分布 6.1.2 二项逻辑斯蒂回归模型 ...

  9. 机器学习理论《统计学习方法》学习笔记:第五章 决策树

    机器学习理论<统计学习方法>学习笔记:第五章 决策树 决策树 5.1 决策树模型与学习 5.1.1 决策树模型 5.1.2 决策树与if-then规则 5.1.3 决策树与条件概率分布 5 ...

最新文章

  1. 手把手教你生成对抗网络 GAN,50 行代码玩转 GAN 模型!(附源码)
  2. leetcode:44. 通配符匹配
  3. 2016-6-28 工作总结
  4. DB、ETL、DW、OLAP、DM、BI关系结构图
  5. php上传图片并显示代码,php图片上传代码(完整版已测试)
  6. 蔚来公布西安ES8自燃事故原因 果然是电池的锅...
  7. 6. ubuntu 下 mysql 数据库迁移
  8. matlab cos sinx,matlab求y=sinxcos(2x)及其包络线急!!!
  9. [转]企业安全建设二——如何推动安全策略
  10. oracle的dmp导出,oracle数据库dmp文件的导出和导入方法
  11. OnActionExecuting 中设置跳转指定网址或路由
  12. 外媒称阿里副主席蔡崇信正洽谈收购篮网主场球馆 此前已收购球队49%股份
  13. 阿里云盘内测申请_阿里云网盘 Teambition 内测申请开放!
  14. 转载:嵌入式系统综述之二
  15. 自动正则表达式生成网站
  16. Kbuild语法解析
  17. 【Vue2】vue2全内容整理
  18. java窗口中添加图片_java初学者 求教怎么在窗口中添加一张图片
  19. 进程管理:ps top nice
  20. 单片机点阵 LED 设计显示屏,超详细!

热门文章

  1. CNCC2018 即将开幕,报名优惠截止倒计时5天!
  2. Google地图更新,更AI更贴心更节约时间,就是不敢来中国
  3. 这个机器人花盆,给你的植物长了脚脚
  4. 李飞飞创建的AI4All启动首次mentorship计划
  5. 《C++ Primer Plus》读书笔记之十—类和动态内存分配
  6. Resharper上手指南转
  7. 运维基础--用户的权限管理
  8. 再见Windows C++
  9. iOS:实现邮件和短信发送的简单示例
  10. CentOS下通过postfix使用自己的gmail邮箱发送邮件