目錄
模板語法
{{}} 變量相關
{%%} 邏輯相關
自動序號
{{ forloop.counter }}
模板層之模板傳值
python基本數據類型全部支持傳遞給html文件
函數
類
函數和對象會自動加括號
# 模板語法不支持傳參
對象
后端給html文件傳遞數據的兩種方式
1.指名道姓
return render(request,'index.html',{'n':n,'f':f})
2.locals() # 會將當前名稱空間中所有的變量名全部傳遞給html頁面
return render(request,'index.html',locals())
html頁面上 如何獲取到后端傳遞過來的數據
{{ 變量名 }}
模板層之模板取值
取值
django模板語法取值 只有一種操作方式 句點符 .
點索引
點鍵
<p>{{ l.2 }}</p>
<p>{{ d.username }}</p>
<p>{{ d.password }}</p>
<p>{{ d.hobby.1.username.1 }}</p>
模板語法之過濾器
在Django的模板語言中,通過使用 過濾器 來改變變量的顯示。
過濾器的語法: {{ value|filter_name:參數 }}
使用管道符"|"來應用過濾器。
例如:{{ name|lower }}會將name變量應用lower過濾器之后再顯示它的值。lower在這里的作用是將文本全都變成小寫。
注意事項:
1.過濾器支持“鏈式”操作。即一個過濾器的輸出作為另一個過濾器的輸入。
2.過濾器可以接受參數,例如:{{ sss|truncatewords:30 }},這將顯示sss的前30個詞。
3.過濾器參數包含空格的話,必須用引號包裹起來。比如使用逗號和空格去連接一個列表中的元素,如:{{ list|join:', ' }}
4.'|'左右沒有空格沒有空格沒有空格
|length # 返回值的長度,作用於字符串和列表
|add # 加法運算
|default # 如果一個變量是false或者為空,使用給定的默認值。 否則,使用變量的值
|truncatechars # 截取字符串的長度。三個點也算,所有如果要截取5個長度,應該5+3=8的長度
|truncatewords # 截取單詞、詞語,以空格為標識
|filesizeformat # 把文件大小轉換成人能看懂的。KB,GB
|slice # 切片操作
|date # 日期格式化
|safe # 取消轉義操作
使用案例:
<p>過濾器 |左邊的會當做過濾器的第一個參數 過濾器名右邊的會當做過濾器的第二個參數</p>
<p>求數據長度:{{ s|length }}</p>
<p>加法運算:{{ n|add:10 }}、{{ s|add:13132 }}、{{ s|add:'DSB' }}</p>
<p>默認值(判斷值是否為空):{{ b|default:'這個b布爾值是True' }}、{{ ff|default:'這個ff布爾值是Flase' }}</p>
<p>截取字符(截取5個字符 三個點也算):{{ s|truncatechars:8 }}</p>
<p>截取單詞(截取8個單詞 三個點不算):{{ ss|truncatewords:8 }}、{{ sss|truncatewords:4 }}</p>
<p>文件大小:{{ file_size|filesizeformat }}</p>
<p>切片操作:{{ s|slice:'0:2' }}、{{ s|slice:"0:8:2" }}</p>
<p>日期格式化:{{ ddd|date:'Y年/m月/d日' }}</p>
<p>轉義:{{ res|safe }}、{{ res1 }}、后端直接標識安全:{{ res2 }}</p>
前后端取消轉義:
前端
|safe
后端
from django.utils.safestring import mark_safe
mark_safe('<h1>安全滴</h1>')
總結:前端代碼不一定非要在前端頁面寫,可以在后端寫好傳遞給前端頁面使用
這樣的話 你就可以利用到后端更加多的邏輯語法
模板語法之標簽
模板語法之標簽 (邏輯相關)
{% for foo in l %} <!--l = [1,2,3,4,5,6]-->
{% if forloop.first %}
<p>這是我的第一次</p>
{% elif forloop.last %}
<p>這是最后一次了啊~</p>
{% else %}
<p>{{ foo }}</p>
{% endif %}
{% empty %}
<p>for循環的對象內部沒有值</p>
{% endfor %}
自定義過濾器
自定義過濾器 標簽 inclusion_tag
先完成以下前期准備工作
1.在應用名下新建一個名字必須叫templatetags文件夾
2.在該文件夾內新建一個任意名稱的py文件(eg:mytag)
3.在該文件內 必須先寫以下兩句代碼
from django.template import Library
register = Library()
# 自定義過濾器
@register.filter(name='my_sum')
def index(a,b):
return a + b
第一步定義:
第二步html頁面使用方式:
<p>自定義過濾器的使用</p>
{% load mytag %}
<p>{{ 10|my_sum:90 }}</p>
自定義標簽
# 自定義標簽
@register.simple_tag(name='my_baby')
def xxx(a,b,c,d):
return '%s?%s?%s?%s'%(a,b,c,d)
自定義標簽的使用:
<p>自定義標簽的使用</p>
{% load mytag %}
<p>{% my_baby 1 2 3 'hello world' %}</p>
總結:
<p>自定義的過濾器可以在邏輯語句中,而自定義的標簽不可以</p>
{% if 10|my_sum:100 %}
<p>條件成立</p>
{% endif %}
{% if my_baby 1 2 3 4 %}
<p>條件成立</p>
{% endif %}
<p>自定義inclusion_tag的使用</p>
{% load mytag %}
{% myin 5 %}
# 總結 頁面上使用他們 統一先導入
{% load mytag %}
模板的繼承
某一個頁面大部分區域都是公用的 那這個頁面就可以作為模板頁面
當別人繼承這個頁面之后 如何修改對應的區域
使用方法:
1.先在模板頁面上通過block實現划定區域
{% block content %}
模板頁面內容
{% endblock %}
2.子頁面中先導入整個模板
{% extends '模板頁面.html'%}
修改特定的區域 通過實現划定好的區域名稱
{% block content %}
子頁面內容
{% endblock %}
通常情況下 模板頁面頁面應該起碼有三塊區域
1.css部分
{% block css %}
模板頁面內容
{% endblock %}
2.內容部分
{% block content %}
模板頁面內容
{% endblock %}
3.JS部分
{% block js %}
模板頁面內容
{% endblock %}
# 模板的block塊越多 可擴展性越高
還支持子頁面調用父頁面對應區域的內容 並且可以無限次調用
{{ block.super }}
模板的組件
可以將局部樣式布局提前寫好,然后哪里需要導哪里(不常用)
將html頁面當做模塊使用 哪里需要導哪里 這個html頁面通常都不是完整的 只是一個局部樣式
{% include 'left.html' %}
for循環
普通for循環
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
for循環可用的一些參數:
Variable | Description |
---|---|
forloop.counter |
當前循環的索引值(從1開始) |
forloop.counter0 |
當前循環的索引值(從0開始) |
forloop.revcounter |
當前循環的倒序索引值(從1開始) |
forloop.revcounter0 |
當前循環的倒序索引值(從0開始) |
forloop.first |
當前循環是不是第一次循環(布爾值) |
forloop.last |
當前循環是不是最后一次循環(布爾值) |
forloop.parentloop |
本層循環的外層循環 |
for ... empty
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% empty %}
<li>空空如也</li>
{% endfor %}
</ul>
if,elif,else判斷
{% if user_list %}
用戶人數:{{ user_list|length }}
{% elif black_list %}
黑名單數:{{ black_list|length }}
{% else %}
沒有用戶
{% endif %}
也可以只有if和else
{% if user_list|length > 5 %}
七座豪華SUV
{% else %}
黃包車
{% endif %}
if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
with
定義一個中間變量,多用於給一個復雜的變量起別名。
注意等號左右不要加空格。
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
或
{% with business.employees.count as total %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
模板語法注釋
{# 注釋內容 #} //這樣方式注釋,前端瀏覽器檢查看不見
<!--注釋內容--> //瀏覽器檢查能看見