MVCcss
html
V view(視圖 展現數據 html文件)python
C controller(控制器 調度)數據庫
MTVdjango
bootstrap
T template(模板 渲染 html文件)安全
V view(視圖 函數,業務邏輯)app
在模板中使用變量,一般使用 . 的形式進行調用函數
{{ 列表.0 }} 索引 {{ 字典.'鍵' }} {{ 字典.keys }} {{ 字典.values}} {{ 字典.items}} {{ 對象.屬性}} {{ 對象.方法}} 只能調用沒有參數的方法
優先級:oop
1.字典的key
2.屬性或者方法
3.數字索引
官方文檔 : 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}}
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 %}
不支持算數運算,可是可使用add等內置過濾器等方法實現
不支持連續判斷,和python不一樣 例: 10 > 5 > 1 結果爲false
with
定義一箇中間變量
{% with total=business.employees.count %} 將數據賦值給中間變量total
{{ total }} employee{{ total|pluralize }} 直接使用total寫邏輯
{% endwith %}
母版:
能夠在文件中定義一些block塊,讓子頁面從新覆蓋 {% block 名稱 %} {% endblock %}
繼承:
重寫block塊
{% block 名稱 %}
'內容'
{% endblock %}
注意:
{% extends 'html文件名稱' %} 文件名字要帶引號,否則會被當作變量名稱去查找
要在頁面顯示的內容放在block塊中,寫在其餘部分不會顯示
若是模板中定義了多個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相似,可是接收更靈活的參數
流程與自定義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' %} 各參數以空格分隔
返回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">«</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">»</span> </a> </li> </ul> </nav>
在模板中使用
{% load my_tags %}
{% pagination 5 3 %}