[Django學習]第四章 模板

1.首先是我寫的一個簡單的html文件html

<html>
<head>
    <title>Title</title>
</head>
<body>
{% for n in l %}
    <h1>this is {{ n }}</h1>
{% endfor %}
</body>
</html>

在html文件中,我嵌入了一個for循環,而後用標籤<h1>顯示出每一次的結果。python

在這個for循環裏面,倆箇中括號括起來的 {{ n }} 稱爲變量,而一箇中括號一個百分號括起來的稱爲模板標籤{%  %},這裏的模板標籤是for標籤,它就相似於python代碼裏的for語句,但與for語句仍是有些不一樣。django

2.那麼,咱們怎麼在python代碼中使用模板呢?簡單記錄一下app

在Python代碼中使用Django模板的最基本方式以下:函數

  1. 能夠用原始的模板代碼字符串建立一個 Template 對象, Django一樣支持用指定模板文件路徑的方式來建立 Template 對象;oop

  2. 調用模板對象的render方法,而且傳入一套變量context。它將返回一個基於模板的展示字符串,模板中的變量和標籤會被context值替換。post

from django.template import Template,Context
t=Template('My name is {{ name }}')
c=Context({'name':'cb'})
print(t.render(c))
My name is cb

3.標籤this

if/else

{% if %} 標籤檢查(evaluate)一個變量,若是這個變量爲真(即,變量存在,非空,不是布爾值假),系統會顯示在 {% if %} 和 {% endif %} 之間的任何內容,例如:lua

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

{% else %} 標籤是可選的:spa

{% 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(很明顯)

沒有{% elif %}標籤,且必定要用 {% endif %} 關閉每個 {% if %} 標籤。

for

{% for %} 容許咱們在一個序列上迭代。 與Python的 for 語句的情形相似,循環語法是 for X in Y ,Y是要迭代的序列而X是在每個特定的循環中使用的變量名稱。 每一次循環中,模板系統會渲染在 {% for %} 和 {% endfor %} 之間的全部內容。

在每一個`` {% for %}``循環裏有一個稱爲`` forloop`` 的模板變量。這個變量有一些提示循環進度信息的屬性。

forloop.counter 老是一個表示當前循環的執行次數的整數計數器。 這個計數器是從1開始的,因此在第一次循環時 forloop.counter 將會被設置爲1。

{% for item in todo_list %}
    <p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}

forloop.counter0 相似於 forloop.counter ,可是它是從0計數的。 第一次執行循環時這個變量會被設置爲0。

forloop.revcounter 是表示循環中剩餘項的整型變量。 在循環初次執行時 forloop.revcounter 將被設置爲序列中項的總數。 最後一次循環執行中,這個變量將被置1。

forloop.revcounter0 相似於 forloop.revcounter ,但它以0作爲結束索引。 在第一次執行循環時,該變量會被置爲序列的項的個數減1。

 

 

forloop 變量僅僅可以在循環中使用。 在模板解析器碰到{% endfor %}標籤後,forloop就不可訪問了。

ifequal/ifnotequal

 

{% ifequal %} 標籤比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中全部的值。和 {% if %} 相似, {% ifequal %} 支持可選的 {% else%} 標籤:

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

只有模板變量,字符串,整數和小數能夠做爲 {% ifequal %} 標籤的參數。

註釋

就像HTML或者Python,Django模板語言一樣提供代碼註釋。 註釋使用 {# #} :

{# This is a comment #}

若是要實現多行註釋,可使用{% comment %}

{% comment %}
This is a
multi-line comment.
{% endcomment %}

過濾器

就象本章前面提到的同樣,模板過濾器是在變量被顯示前修改它的值的一個簡單方法。 過濾器使用管道字符,以下所示:

{{ name|lower }}

顯示的內容是變量 {{ name }} 被過濾器 lower 處理後的結果,它功能是轉換文本爲小寫。

過濾管道能夠被* 套接* ,既是說,一個過濾器管道的輸出又能夠做爲下一個管道的輸入,如此下去。 下面的例子實現查找列表的第一個元素並將其轉化爲大寫。

{{ my_list|first|upper }}

有些過濾器有參數。 過濾器的參數跟隨冒號以後而且老是以雙引號包含。 例如:

{{ bio|truncatewords:"30" }}

這個將顯示變量 bio 的前30個詞。

addslashes : 添加反斜槓到任何反斜槓、單引號或者雙引號前面。 這在處理包含JavaScript的文本時是很是有用的。

date : 按指定的格式字符串參數格式化 date 或者 datetime 對象, 範例:

{{ pub_date|date:"F j, Y" }}

length : 返回變量的長度。 對於列表,這個參數將返回列表元素的個數。 對於字符串,這個參數將返回字符串中字符的個數。 你能夠對列表或者字符串,或者任何知道怎麼測定長度的Python 對象使用這個方法(也就是說,有 __len__() 方法的對象)。

4.使用locals函數將視圖裏的參數傳遞到html文件中

def post(request):
    l=list()
    l.append('x')
    l.append('y')
    name='jeck'
    return render(request,'end.html',locals())

使用locals函數將post中的l,name傳遞到end.html中。

相關文章
相關標籤/搜索