Template 模板

MVC   MTV

MVCcss

  • M models(和數據庫進行交互)html

  • V view(視圖 展現數據 html文件)python

  • C controller(控制器 調度)數據庫

MTVdjango

  • M models(orm)bootstrap

  • T template(模板 渲染 html文件)安全

  • V view(視圖 函數,業務邏輯)app

變量

在模板中使用變量,一般使用 . 的形式進行調用函數

{{ 列表.0 }}       索引

{{ 字典.'' }}

{{ 字典.keys }}

{{ 字典.values}}

{{ 字典.items}}

{{ 對象.屬性}}

{{ 對象.方法}}       只能調用沒有參數的方法

 

優先級:oop

1.字典的key

2.屬性或者方法

3.數字索引

filter  過濾器

官方文檔 : https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#ref-templates-builtins-filters

default 默認值

{{ value|default:"nothing"}}   變量不存在或者值爲空時,顯示默認值

 

filesizeformat 文件尺寸

(例如 '13 KB', '4.1 MB', '102 bytes', 等等)

{{ value|filesizeformat }}

 

add 加

數字加減(負數)

字符串拼接

列表拼接

{{ value|add:"2" }}

 

首先嚐試將兩個值強制轉換爲整數,若是失敗,它將嘗試將值一塊兒添加到一塊兒。這將適用於某些數據類型(字符串,列表等),而對其餘數據類型則失敗。若是失

敗,結果將爲空字符串。能夠強制轉換爲整數的字符串將被求和

lower 小寫

{{ value|lower }}

 

upper 大寫

{{ value|upper}}

 

title 標題

首字母大寫

{{ value|title }}

 

ljust 左對齊

{{ value|ljust:"10" }}

 

rjust 右對齊

{{ value|rjust:"10" }}

 

center 居中

頁面顯示時會將空格摺疊,因此在顯示時可能看不到居中的效果

{{ value|center:"15" }}

 

length 長度

{{ value|length }}

 

返回value的長度,如 value=['a', 'b', 'c', 'd']的話,就顯示4.

slice 切片  

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

 

first

取第一個元素

{{ value|first }}

 

last

取最後一個元素

{{ value|last }}

 

join 拼接

同python的str.join(list)

{{ value|join:" // " }}

 

truncatechars 截斷

若是字符串字符多於指定的字符數量,那麼會被截斷。截斷的字符串將以可翻譯的省略號序列(「...」)結尾。須要注意的是,省略號也會被計算進截斷的字符數中

{{ value|truncatechars:9}}     參數:截斷的字符數

 

date 日期格式化

{{ value|date:"Y-m-d H:i:s"}}      html中的格式與python中不一樣

 

可格式化輸出的字符:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#date

safe 安全

Django會出於安全,對HTML標籤和JS等語法標籤進行自動轉義,顯示字符串形式。可是有的時候咱們可能不但願這些HTML元素被轉義,能夠經過過濾器「|safe」的

方式告訴Django這段代碼是安全的沒必要轉義。

value = '<a href = "www.baidu.com"></a>'

{{ value|safe}}

 

 自定義filter

1.在app下建立一個名爲templatetags的包 # templatetags爲固定寫法,不能變

2.在包內建立py文件 (例:my_tags.py)

3.在py文件中:

from django import template

register = template.Library()     #  register固定寫法 不能變

 

 4.寫函數+裝飾器

@register.filter
def add_str(value, arg=None):        # 函數名就是過濾器的名字  value是變量  arg是給變量添加額外的參數,能夠不寫
    ret = '{}__{} '.format(value, arg)
    print(ret)
    return ret

 

 5.在模板中使用自定義過濾器

{% load my_tags %}             # 導入文件

{{ 'alex'|add_str:'sb' }}

 

標籤 

 for循環

{%  for  i in  name_list %}
    {{ forloop }}         
{% empty %}          # 當沒有數據時    
    沒有數據
{% endfor %}

 

forloop

forloop.counter           當前循環的索引值(從1開始)
forloop.counter0          當前循環的索引值(從0開始)
forloop.revcounter        當前循環的倒序索引值(到1結束)
forloop.revcounter        當前循環的倒序索引值(到0結束)
forloop.first             判斷當前循環是否是第一次循環
forloop.last              判斷當前循環是否是最後一次循環
forloop.parentloop        本次循環的外層循環

 

if判斷

{% if user_list %}
  用戶人數:{{ user_list|length }}
{% elif black_list %}
  黑名單數:{{ black_list|length }}
{% else %}
  沒有用戶
{% endif %}

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

不支持算數運算,可是可使用add等內置過濾器等方法實現

不支持連續判斷,和python不一樣 例: 10 > 5 > 1 結果爲false

with

定義一箇中間變量

{% with total=business.employees.count %}       將數據賦值給中間變量total
    {{ total }} employee{{ total|pluralize }}   直接使用total寫邏輯
{% endwith %}

 

母版和繼承

母版:

將多個頁面共同的html代碼提取出來,生成一個新的html文件

能夠在文件中定義一些block塊,讓子頁面從新覆蓋     {% block 名稱 %} {% endblock %}

繼承:

在寫具體的模板時,繼承母版中的代碼 {% extends 'html文件名稱' %}

重寫block塊

{% block 名稱 %}

  '內容'

{% endblock %}

注意:

  1. {% extends 'html文件名稱' %} 寫在最開始,前面不要有內容

  2. {% extends 'html文件名稱' %} 文件名字要帶引號,否則會被當作變量名稱去查找

  3. 要在頁面顯示的內容放在block塊中,寫在其餘部分不會顯示

  4. 若是模板中定義了多個block塊 通常寫css js

組件

把文件中共同的一段代碼封裝在一個html文件中(代碼固定寫死,不靈活)

使用: {% include ‘文件名稱’ %}

靜態文件

若是在項目開發過程當中,修改了settings文件中靜態文件的別名,須要把全部文件當中的引用所有修改,可使用相關的方法,動態獲取靜態文件的別名.

{% load static %}         獲取靜態文件名稱,在括號內補全路徑

<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7/css/bootstrap.css' %}"

{% get_static_prefix %}    獲取靜態文件的別名   在括號外補全路徑

<link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">

 

自定義simple_tag

自定義filter最多隻能有兩個參數,變量和參數,有必定侷限

自定義simple_tag和自定義filter相似,可是接收更靈活的參數

流程與自定義filter大體同樣

寫函數+裝飾器

@register.simple_tag
def join_str(*args,**kwargs):          接收的參數無限制,使用萬能形參
    return '+'.join(args), '*'.join(kwargs.values())

 

在模板中使用

{% load my_tags %}

{% join_str 'alex' 'wusir' k1='taibai' k2='baoge' %}    各參數以空格分隔

 

自定義inclusion_tag

返回html代碼片斷

例:分頁功能

寫函數+裝飾器

@register.inclusion_tag('pagination.html')           # 須要寫返回的html文件名字

def pagination(num,now):
    return {'num':range(1,num+1),'now':now}          # 以字典形式返回 num是數字數字不可迭代,返回值時須要處理一下

 

寫pagination.html文件

<nav aria-label="Page navigation">
    <ul class="pagination">
        <li>
            <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
        </li>
        {% for i in num %}                   
            {% if i == now %}           {# 將當前頁面設置成選中狀態 #}
                <li class="active" ><a href="#">{{ i }}</a></li>
            {% else %}
                <li><a href="#">{{ i }}</a></li>
            {% endif %}
        {% endfor %}
        <li>
            <a href="#" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
        </li>
    </ul>
</nav>

 

在模板中使用

{% load my_tags %}

{% pagination 5 3 %}
相關文章
相關標籤/搜索