Django -- 模板語法

12.2.9 模板語法
1. MVC框架和MTV框架
  • MVC框架python

    img

    M - model : 模型 -- 與數據庫交互,操做數據庫git

    V - view : 視圖 -- 展現頁面 HTML數據庫

    C - controller : 控制器 -- 調度做用,負責業務邏輯django

  • MTV框架安全

    img

    M - model : 模型 -- 與數據庫交互,操做數據庫 ( ORM )app

    T - template : 視圖 -- 模板,HTML框架

    V - view : 視圖 -- 負責業務邏輯函數

2. 變量
{{ 變量名 }}
{{ 變量名. }}  # 能夠經過點的方式獲取值
list.索引(索引值不能爲負) 
dict.key / dict.keys / dict.values / dict.items
​
{{ 類實例化對象 }}
obj.屬性 / obj.方法

 

<!-- 注:-->oop

當模板系統遇到一個(.)時,會按照以下的順序去查詢:post

  1. 在字典中查詢 ( 若是字典中有key名字爲 'keys',查詢的時候先找keys對應的values)

  2. 屬性或者方法

  3. 數字索引

3. 過濾器

filters 過濾器 -- 用來修改變量的顯示結果

語法: {{ value|filter_name }} / {{ value|filter_name:參數 }}

<!-- ':' 左右沒有空格沒有空格沒有空格,參數最多有一個 -->

default -- 提供默認值

{{ xxx|default:'nothing' }} # 傳過來的變量不存在或者爲空,使用默認值
# 注:
     在setting中TEMPLATES的OPTIONS能夠增長一個選項:string_if_invalid:'NOT FOUND',能夠替代default的的做用。(優先級高於default)

 

slice -- 切片

{{ name_list|slice:'0:1' }}

 

filesizeformat -- 文件大小格式化

'filesize': 1*1024
{{ filesize|filesizeformat }}  # 1.0KB

 

add -- 表示 +

{{ num|add:1 }}  # 數字相加
{{ string|add:'123' }} # 字符串拼接
{{name_list|add:other_list} # 列表合併

 

length -- 返回變量的長度

{{ value|length }}

 

join 使用字符串拼接列表

{{ name_list|join:'_' }}

 

truncatechars -- 按照字符分割.截斷的字符串,多餘的用'...'表示

{{ long|truncatechars:'15' }} # 只顯示15個字符,三個點也包含在15個字符內

 

truncatewords -- 按照單詞分割(按照空格)

{{ long|truncatewords:'6' }}

 

date -- 日期格式化

{{ now|date:'Y-m-d H:i:s' }}
# settings配置 -- Django中就能夠不用日期過濾器
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'

 

safe -- 告訴django不須要轉義,是安全的

{{ js|safe }} 
​
# 在Python文件中設置
from django.utils.safestring import mark_safe
mark_safe('<a href="https://www.baidu.com">跳轉</a>')
{{ a }}

 


4. 自定義過濾器
  1. 在app01文件下建立一個templatetags的python包

  2. 在包內建立py文件 -- 自定義名字 ( my_ tags.py )

  3. 在py文件中寫入

    from django import template
    register = template.Library()   # regiter不能變,固定寫法

     

  4. 定義函數 + 裝飾器

    @register.filter() # 添加裝飾器
    def new_upper(value,arg=None):  # arg接收過濾器的參數
        return value.upper()

     

  5. 在模板中使用

    {% load my_tags %}  # 在模板中導入
    {{ 'abc'|new_upper:dic }} # 函數名就是過濾器名

     

5. Tag -- 標籤
  1. for

{%  for i in list %}
    {{ forloop.counter }}
    {{ i }}
{% endfor %

 

for循環可用的一些參數

Variable(變量) Description(描述)
{{ forloop.counter }} 當前循環的從1開始的計數
{{ forloop.counter0 }} 當前循環的從0開始的計數
{{ forloop.revcounter }} 當前循環的倒敘計數(到1結束)
{{ forloop.revcounter0 }} 當前循環的倒敘計數(到0結束)
{{ forloop.first}} 當前循環是不是第一次循環 布爾值
{{ forloop.last}} 當前循環是不是最後一次循環 布爾值
{{ forloop.parentloop }} 當前循環父級循環的forloop

for ... empty

{% for name in name_list %}
    {{ name }}
{% empty %}
    空的數據
{% endfor %}

 

  1. if

{% if p1.age < 18 %}
    他仍是個寶寶
{% elif p1.age == 18 %}
    剛成年,能夠出家
{% else %}
    騷老頭子壞得很
{% endif %}

 

<!-- 不支持算數運算 ,不支持連續判斷 -->

<!-- if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。 -->

  1. with

{% with agoni=person_list.1.name age=person_list.1.age   %}
    {{ agoni }} {{ age }}
{% endwith %}

 

  1. csrf_token

    這個標籤用於跨站請求僞造保護。

    在頁面的form表單裏面寫上{% csrf_token %}

    form表單中有一個隱藏的input標籤 name ='csrfmiddlewaretoken'

    <!-- 看下圖 -->

<form action="" method="post">
    {% csrf_token %}
    <input type="text" name="name">
    <button>提交</button>
</form>

 

相關文章
相關標籤/搜索