1. 程式人生 > 其它 >Django之模板語法

Django之模板語法

模板語法

模板語法之傳值

  1、跟變數相關的都使用雙括號 {{}}

  2、跟邏輯相關的都使用 {% %}

  3、模板檔案中取值一律使用點語法

  4、在模板檔案裡面的函式和類,不用加括號,會自動加括號呼叫, 不能傳遞引數

模板語法之過濾器

  類似於python裡面的內建方法

  1、語法

    {{變數|過濾器:引數}}

  2、default

    如果一個變數是false或者為空,使用給定的預設值。否則,使用變數的值

{{ value|default:"nothing"}}

  3、length

    返回值的長度。它對字串和列表都起作用。

{{ value|length }}

  4、filesizeformat

    將值格式化為一個 “人類可讀的” 檔案尺寸 (例如'13 KB','4.1 MB','102 bytes', 等等)。

{{ value|filesizeformat }}

    如果value是 123456789,輸出將會是117.7 MB

  5、date

    如果 value=datetime.datetime.now()

{{ value|date:"Y-m-d"}}

  6、slice

    如果 value=”hello world”

{{ value|slice:"2:-1"}}

  7、truncatechars

    如果字串字元多於指定的字元數量,那麼會被截斷。截斷的字串將以可翻譯的省略號序列(“…”)結尾。

    引數:要截斷的字元數

{{ value|truncatechars:9}}

  8、safe

    Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後臺新增的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文字,如果自動轉義的話顯示的就是保護HTML標籤的原始檔。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變數我們可以通過過濾器“|safe”的方式告訴Django這段程式碼是安全的不必轉義。

value="<a href="">點選</a>"
{{ value|safe}}

  9、其它過濾器(瞭解)

過濾器描述示例
upper 以大寫方式輸出
add 給value加上一個數值
addslashes 單引號加上轉義號
capfirst 第一個字母大寫
center 輸出指定長度的字串,把變數居中
cut 刪除指定字串
date 格式化日期
default 如果值不存在,則使用預設值代替
default_if_none 如果值為None, 則使用預設值代替
dictsort 按某欄位排序,變數必須是一個dictionary
dictsortreversed 按某欄位倒序排序,變數必須是dictionary
divisibleby 判斷是否可以被數字整除
escape 按HTML轉義,比如將”<”轉換為”&lt”
filesizeformat 增加數字的可讀性,轉換結果為13KB,89MB,3Bytes等
first 返回列表的第1個元素,變數必須是一個列表
floatformat 轉換為指定精度的小數,預設保留1位小數
get_digit 從個位數開始擷取指定位置的數字
join 用指定分隔符連線列表
length 返回列表中元素的個數或字串長度
length_is 檢查列表,字串長度是否符合指定的值
linebreaks


標籤包裹變數

linebreaksbr
標籤代替換行符
linenumbers 為變數中的每一行加上行號
ljust 輸出指定長度的字串,變數左對齊
lower 字串變小寫
make_list 將字串轉換為列表
pluralize 根據數字確定是否輸出英文複數符號
random 返回列表的隨機一項
removetags 刪除字串中指定的HTML標記
rjust 輸出指定長度的字串,變數右對齊
slice 切片操作, 返回列表
slugify 在字串中留下減號和下劃線,其它符號刪除,空格用減號替換
stringformat 字串格式化,語法同python
time 返回日期的時間部分
timesince 以“到現在為止過了多長時間”顯示時間變數
timeuntil 以“從現在開始到時間變數”還有多長時間顯示時間變數
title 每個單詞首字母大寫
truncatewords 將字串轉換為省略表達方式
truncatewords_html 同上,但保留其中的HTML標籤
urlencode 將字串中的特殊字元轉換為url兼容表達方式
urlize 將變數字串中的url由純文字變為連結
wordcount 返回變數字串中的單詞數

模板語法之標籤

  1、迴圈序號可以通過{{forloop}}顯示

forloop.counter            The current iteration of the loop (1-indexed) 當前迴圈的索引值(從1開始)
forloop.counter0           The current iteration of the loop (0-indexed) 當前迴圈的索引值(從0開始)
forloop.revcounter         The number of iterations from the end of the loop (1-indexed) 當前迴圈的倒序索引值(從1開始)
forloop.revcounter0        The number of iterations from the end of the loop (0-indexed) 當前迴圈的倒序索引值(從0開始)
forloop.first              True if this is the first time through the loop 當前迴圈是不是第一次迴圈(布林值)
forloop.last               True if this is the last time through the loop 當前迴圈是不是最後一次迴圈(布林值)
forloop.parentloop         本層迴圈的外層迴圈

  2、在模板中使用if else for

{% for foo in l %}
    <p>
{#     {{ forloop }}#}
        {% if forloop.first %}
            第一次
        {% elif forloop.last %}
            最後一次
        {% else %}
            {{ foo }}
        {% endif %}
    </p>
{% endfor %}

  3、處理字典

{% for foo in user_dict.keys %}
   <p>
    {{ foo }}
   </p>
{% endfor %}


{% for foo in user_dict.values %}
    <p>
        {{ foo }}
    </p>
{% endfor %}


{% for foo in user_dict.items %}
    <p>
    {{ foo }}
    </p>
{% endfor %}

模板繼承

  1、繼承

    模板頁面寫好之後,繼承頁面直接寫{% extends '模板頁面名‘ %}

  這樣繼承之後子模版和原模板的內容一摸一樣

  2、繼承並支援修改

    模板頁面想要修改的部分

{% block content %}
         <p>亞洲最大的賭場</p>
{% endblock %}

    子繼承頁面

{% block content %}
    
     修改內容

 
{% endblock %}

  3、一般情況下模板頁面應該至少有三塊可以被修改的區域

    1、css區域

    2、js區域

    3、html區域

   這樣寫之後每個頁面就有自己獨有的css程式碼、js程式碼、html程式碼

模板匯入

  語法  

{% include  匯入頁面 %}

  例子

需要被匯入的

<h1>這是left_menu</h1>

匯入

{% include 'left_menu.html' %}

END