django 基本模板標籤

標籤oop

下面的部分概述了常見的Django標籤。測試

if/else編碼

{%if%} 標籤 對一個變量值進行測試,若是結果爲true,系統將會顯示在{%if%} 和 {%endif%}之間的一切,看個例子:spa

複製代碼
{% 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來測試多變量,參考下面的例子:code

複製代碼
{% 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同時出如今一個標籤語句中,由於這樣會引發歧義。例如:blog

{% if athlete_list and coach_list or cheerleader_list %}

括號在這裏不支持的,若是你有須要,能夠考慮將邏輯放在模板的外層,並將指定的模板變量做爲結果傳出來。或者嵌套{%if%}標籤:it

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

屢次使用同一操做符是能夠的,但同時使用多個不一樣的操做符是不能夠的。下面的語句是有效的:io

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

沒有{%elif%}標籤,用嵌套的{%if%}標籤來完成一樣的是事情:ast

複製代碼
{% 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 }}
相關文章
相關標籤/搜索