模板語言
{{ 變量 }}
{% 邏輯 %}
{{ 變量 }}
{{ 變量 }}中的點號
用於取出字典/列表等類型數據的值
{{ list.2 }} 獲取列表list中索引為2的值
{{ dict.name }} 獲取字典中name的值
{{ 變量 }}內置的過濾器
以|分隔
{{ a|safe }} 於django輸出前,要求不對字符進行轉義。自動轉義關閉時自動失效
{{ time|date:'Y-m-d H:i:s' }} 格式化輸出時間 年月日時分秒
{{ list|join:',' }} 相當於 ‘,’.join(list)
{{ str|truncatechars:8 }} 顯示內容為5個字符與3個點號 共8個字符
{{ str|truncatechars:8 }} 同上 顯示單位為單詞 按空格辨別
{{ str|length }} str的長度
{{ list|slice:'0-2' }} 切片索引0-2不含2
{{ var|default:'xxx' }} 為var設置默認值為‘xxx’
{{ str|lower }}{{ str|upper }} 輸出顯示為小/大寫
{{ int|filesizeformat }} 轉為內存大小單位 類似於2GB 1TB
{% 邏輯 %}
for循環
<ul> {% for student_name in name %} <li>{{ student_name }}</li>
{% empty %} //若name為空則於此結束並打印None
<li>None</li>
{% endfor %} //正常結束for循環
</ul>
if 條件判斷語句
{% if num > 100 %} //比較運算符兩邊必須留下空格才可以識別 <p>大於100</p> {% elif num == 200 %} <p>等於100</p> {% else %} <p>小於100</p> {% endif %}
csrf_token
防御跨站請求偽造,這個標簽用於跨站請求偽造保護
<form action='/main_h/' method="post"> {% csrf_token %} //寫在form表單內 <input type="text" name="usm"> <input type="password" name="pwd"> <input type="submit"> </form>
裝飾器的形式實現防御跨站請求偽造
from django.views.decorators.csrf import csrf_exempt,csrf_protect
# 於views.py文件中導入csrf_exempt,csrf_protect
@csrf_protect # 強制放行csrf認證,即便全局配置了csrf認
def main_h(request):
return render(request,'main_h.html')
@csrf_exempt # 強制進行csrf認證,即便全局沒有配置csrf認證
def dome(request):
return render(request,'dome.html')
模板繼承
1 創建一個模板.html文件,
2 {% extends '模板.html' %} 3 模板.html {% block content %} xxxxxxx{% endblock %} 還可以指定名字{% endblock content%} 4 繼承模板的文件里面 {% block content %} 自己html里面的內容{% endblock %} 5 保留模板內容的寫法 {% block content %} {{ block.super }}自己html里面的內容{% endblock %}
模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ float: left; width: 20%; } </style> </head> <body> <h1>Welcome</h1> {% block head %} <h1 style="background: antiquewhite">這是模板的大概率應用部分</h1> {% endblock %}
# 設置可修改內容
<div> <p>標題一</p> <p>標題二</p> <p>標題三</p> </div>
{% block name %} <span>主頁</span> {% endblock %}
# 設置可修改內容 </body> </html>
繼承
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% extends "main_h.html" %}
# 繼承模板HTML文件
{% block head %} {{ block.super }} {% endblock %}
# 繼承延用內容
{% block name %} 分頁1 {% endblock %}
# 繼承修改內容 </body> </html>
組件
將一個完整功能模塊,放到一個hmtl文件中,使用這個模塊的其他頁面,直接在頁面中引入即可, 引入方式{% include '模塊.html' %} ,任意位置引入
ps:(僅引入body內容)
組件HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> h1{ width: 100%; height: 5%; background: aqua; } </style> </head> <body> <h1>這是組件內容</h1> </body> </html>
引入組件 {% include 'xxx.html' %}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% include 'h1_h.html' %} //引入組件 ps:(與模板沖突,只會顯示模板而不顯示組件) </body> </html>
自定義標簽與過濾器
1 app應用文件夾中創建一個叫做templatetags的文件夾
2 創建一個py文件,例如:mytag.py 3 mytag.py, from django import template register = template.Library() #register變量必須是這個名字 過濾器: @register.filter def xxx(): 參數最多兩個 return 'xxx' 標簽: @register.simple_tag def sss(): 參數可以多個 return 'xxx' 標簽: @register.inclusion_tag('html文件') def aaa(): 參數可以多個 return {'xx':'xxxxx'} html文件中的使用 <h1> {# {{ num|xxx:'11,23,33'}}#} {{ num|xxx:20 }} {% if num|xxx:20 > 2000 %} <h2>大於2千</h2> {% else %} <h2>小於等於2千</h2> {% endif %} </h1> <h1> {% sss num 10 15 %} </h1> <h1> {% aaa %} </h1>
pydiango1\app01\templatetags\mytag.py文件下
from django import template
from django.utils.safestring import mark_safe
register=template.Library()
@register.simple_tag
def sum_max(a,b,c,d):
num=a*b*c*d
return num
# 自定義標簽 可接收多個參數
@register.filter
def num_20(num1,num2):
num1*=num2
return num1
# 自定義過濾器 最多接收2個參數
HTML文件下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% load mytag %} //引入mytag.py文件 {% include 'h1_h.html' %} {% sum_max 7 8 9 10 %} <p>{{ num|num_20:2 }}</p> </body> </html>
