Python的Django框架中if标签的相关使用,PYTHON框架之

作者: 网络编程  发布:2019-09-03

Python的Django框架中if标签的相关应用,pythondjango

{% if %} 标签检查(evaluate)贰个变量,假使那个变量为真(即,变量存在,非空,不是布尔值假),系统会呈现在 {% if %} 和 {% endif %} 之间的任何内容,举例:

{% if today_is_weekend %}
  <p>Welcome to the weekend!</p>
{% endif %}

{% else %} 标签是可选的:

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

Python 的“真值”

在Python和Django模板系统中,以下这个目的约等于布尔值的False

  •     空列表([] )
  •     空元组(() )
  •     空字典({} )
  •     空字符串('' )
  •     零值(0 )
  •     特殊指标None
  •     对象False(很明显)

    提示:你也得以在自定义的靶子里定义他们的布尔值属性(那几个是python的尖端用法)。

除以上几点以外的富有东西都说是`` True``

{% if %} 标签接受 and , or 也许 not 关键字来对两个变量做推断,只怕对变量取反( 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 %}

明确要用 {% endif %} 关闭每二个 {% if %} 标签。

{% if %} 标签检查(evaluate)三个变量,若是那么些变量为真(即,变量存在,非空,不是布尔值假...

PYTHON框架之DJANGO学习笔记(七)

eif/else

 

  {% if %} 标签检查(evaluate)二个变量,若是那几个变量为真(即,变量存在,非空,不是布尔值假),系统会议及展览示在 {% if %} 和 {% endif %} 之间的另外内容,比如:

 

1 {% if today_is_weekend %}

2     <p>Welcome to the weekend!</p>

3 {% endif %}

  {% else %} 标签是可选的:

 

1 {% if today_is_weekend %}

2     <p>Welcome to the weekend!</p>

3 {% else %}

4     <p>Get back to work.</p>

5 {% endif %}

Python 的“真值”

 

   在Python和Django模板系统中,以下这一个指标也正是布尔值的False:

空列表([] )

 

空元组(() )

 

空字典({} )

 

空字符串('' )

 

零值(0 )

 

非凡目的None

 

对象False(很明显)

 

  除以上几点以外的保有东西都算得"True"。

 

  {% if %} 标签接受 and , or 大概 not 关键字来对多个变量做剖断,可能对变量取反( 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 %}标签替换吧,就好像这么:

 

1 {% if athlete_list %}

2     {% if coach_list or cheerleader_list %}

3         We have athletes, and either coaches or cheerleaders!

4     {% endif %}

5 {% endif %}

 

 

  数十次应用同多少个逻辑操作符是未有毛病的,但是大家无法把差别的操作符组合起来。 比如,那是法定的:

 

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

 

 

  并不曾 {% elif %} 标签, 请使用嵌套的`` {% if %}`` 标签来完毕一致的效果与利益:

 

复制代码

1 {% if athlete_list %}

2     <p>Here are the athletes: {{ athlete_list }}.</p>

3 {% else %}

4     <p>No athletes are available.</p>

5     {% if coach_list %}

6         <p>Here are the coaches: {{ coach_list }}.</p>

7     {% endif %}

8 {% endif %}

复制代码

 

 

  PS:必供给用 {% endif %} 关闭每多个 {% if %} 标签。

 

for

 

  {% for %} 允许大家在四个队列上迭代。 与Python的 for 语句的情景类似,循环语法是 for X in Y ,Y是要迭代的连串而X是在每贰个特定的大循环中选取的变量名称。 每三遍巡回中,模板系统会渲染在 {% for %} 和{% endfor %} 之间的全部内容。

 

  比方,给定贰个选手列表 athlete_list 变量,大家能够利用上边包车型客车代码来浮现那几个列表:

 

1 <ul>

2 {% for athlete in athlete_list %}

3     <li>{{ athlete.name }}</li>

4 {% endfor %}

5 </ul>

 

 

  给标签增添三个 reversed 使得该列表被反向迭代:

 

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

 

  能够嵌套使用 {% for %} 标签:

 

复制代码

1 {% for athlete in athlete_list %}

2     <h1>{{ athlete.name }}</h1>

3     <ul>

4     {% for sport in athlete.sports_played %}

5         <li>{{ sport }}</li>

6     {% endfor %}

7     </ul>

8 {% endfor %}

复制代码

 

 

 

 

  在实行循环以前先检验列表的大大小小是二个惯常的做法,当列表为空时输出一些特意的唤起。

 

复制代码

1 {% if athlete_list %}

2     {% for athlete in athlete_list %}

3         <p>{{ athlete.name }}</p>

4     {% endfor %}

5 {% else %}

6     <p>There are no athletes. Only computer programmers.</p>

7 {% endif %}

复制代码

 

 

  因为这种做法丰硕广大,所以“ for” 标签帮助叁个可选的“{% empty %}” 分句,通过它大家得以定义当列表为空时的输出内容 上面包车型大巴例子与前边那多少个等价:

 

1 {% for athlete in athlete_list %}

2     <p>{{ athlete.name }}</p>

3 {% empty %}

4     <p>There are no athletes. Only computer programmers.</p>

5 {% endfor %}

 

 

  Django不支持退出循环操作。 假如大家想退出循环,能够转移正在迭代的变量,让其独自包蕴须求迭代的连串。 同理,Django也不帮忙continue语句,我们力所不如让日前迭代操作跳回到循环尾部。 

 

  在每一个“ {% for %}”循环里有贰个誉为“ forloop” 的沙盘变量。那个变量有局地提示循环速度新闻的天性。

 

  forloop.counter 总是几个意味近些日子循环的施行次数的整数计数器。 那几个计数器是从1开头的,所以在率先次循环时 forloop.counter 将会被设置为1。

 

1 {% for item in todo_list %}

2     <p>{{ forloop.counter }}: {{ item }}</p>

3 {% endfor %}

 

 

  forloop.counter0 类似于 forloop.counter ,不过它是从0计数的。 第一次推行循环时那个变量会棉被服装置为0。

 

  forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次实践时 forloop.revcounter 将被安装为体系中项的总量。 最终一回巡回实行中,那些变量将被置1。

 

  forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为甘休索引。 在首先次试行循环时,该变量会被置为类别的项的个数减1。

 

  forloop.first 是七个布尔值,纵然该迭代是第贰回实施,那么它被置为“” 在下边包车型客车状态中这些变量是很有用的:  

 

  System Message: WARNING/2 (<string>, line 1071); backlink

 

  Inline literal start-string without end-string.

 

1 {% for object in objects %}

2     {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}

3     {{ object }}

4     </li>

5 {% endfor %}

 

 

  forloop.last 是贰个布尔值;在终极三次进行循环时被置为True。 贰个周围的用法是在一多级的链接之间放置管道符(|)

 

1 {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}

 

 

  上边的模板只怕会产生如下的结果:

 

1 Link1 | Link2 | Link3 | Link4

 

 

  另叁个广大的用途是为列表的每种单词的增加逗号。 

 

1 Favorite places:

2 {% for p in places %}{{ p }}{% if not forloop.last %}, {% endif %}{% endfor %}

 

 

  forloop.parentloop 是一个针对性当前巡回的上一流循环的 forloop 对象的引用(在嵌套循环的动静下)。 例子在此:

 

复制代码

 1 {% for country in countries %}

 2     <table>

 3     {% for city in country.city_list %}

 4         <tr>

 5         <td>Country #{{ forloop.parentloop.counter }}</td>

 6         <td>City #{{ forloop.counter }}</td>

 7         <td>{{ city }}</td>

 8         </tr>

 9     {% endfor %}

10     </table>

11 {% endfor %}

复制代码

 

 

  forloop 变量仅仅能够在循环中选择。 在模板分析器遇到{% endfor %}标签后,forloop就不可访谈了。

 

  Context和forloop变量

 

  在叁个 {% for %} 块中,已存在的变量会被移除,以幸免 forloop 变量被遮住。 Django会把这些变量移动到forloop.parentloop 中。平时大家不要操心这几个难点,可是假如大家在模板中定义了 forloop 那一个变量(当然我们反对这么做),在 {% for %} 块中它会在 forloop.parentloop 被重新命名。

 

  ifequal/ifnotequal

 

  Django模板系统压根儿就没想过完毕一个专职能的编制程序语言,所以它不允许我们在模板中实践Python的讲话(依旧那句话,要了然更加多请参谋观念和限量小节)。 然则相比较八个变量的值何况出示一些结实其实是个太广泛的急需了,所以Django提供了 {% ifequal %} 标签供大家利用。

 

  {% ifequal %} 标签相比八个值,当他俩极度时,突显在 {% ifequal %} 和 {% endifequal %} 之中全体的值。

 

  上边包车型地铁例子相比四个模板变量 user 和 currentuser : 

 

1 {% ifequal user currentuser %}

2     <h1>Welcome!</h1>

3 {% endifequal %}

 

 

  参数可以是硬编码的字符串,随意用单引号可能双引号引起来,所以下列代码都以不利的:

 

复制代码

1 {% ifequal section 'sitenews' %}

2     <h1>Site News</h1>

3 {% endifequal %}

5 {% ifequal section "community" %}

6     <h1>Community</h1>

7 {% endifequal %}

复制代码

 

 

  和 {% if %} 类似, {% ifequal %} 帮衬可选的 {% else%} 标签:

 

1 {% ifequal section 'sitenews' %}

2     <h1>Site News</h1>

3 {% else %}

4     <h1>No News Here</h1>

5 {% endifequal %}

 

 

  独有模板变量,字符串,整数和小数能够作为 {% ifequal %} 标签的参数。上边是官方参数的例证:

 

1 {% ifequal variable 1 %}

2 {% ifequal variable 1.23 %}

3 {% ifequal variable 'foo' %}

4 {% ifequal variable "foo" %}

 

 

  其余任何项目,比方Python的字典类型、列表类型、布尔类型,不能够用在 {% ifequal %} 中。 上边是些错误的例证:

 

1 {% ifequal variable True %}

2 {% ifequal variable [1, 2, 3] %}

3 {% ifequal variable {'key': 'value'} %}

 

 

  假让你须求看清变量是真还是假,请使用 {% if %} 来顶替 {% ifequal %} 。

 

  注释

 

  就像是HTML可能Python,Django模板语言同样提供代码注释。 注释使用 {# #} :

 

1 {# This is a comment #}  

  注释的剧情不会在模板渲染时输出。

 

  用这种语法的讲明无法当先多行。 那几个范围是为着提升模板深入分析的性质。 在底下这么些模板中,输出结果和模板自身是 完全一致的(也便是说,注释标签并不曾被分析为注释):

 

1 This is a {# this is not

2 a comment #}

3 test.

 

 

  要是要兑现多行注释,能够应用`` {% comment %}`` 模板标签,就像是这么:

 

1 {% comment %}

2 This is a

3 multi-line comment.

4 {% endcomment %}

eif/else {% if %} 标签检查(evaluate)三个变量,即便这一个变量为真(即,变量存在,非空,不是布尔值假),系...

本文由王中王开奖结果发布于网络编程,转载请注明出处:Python的Django框架中if标签的相关使用,PYTHON框架之

关键词:

上一篇:第一个Python程序
下一篇:没有了