Django模板層
模板語法傳值
# 模板語法形式:1.{{ 變量相關 }} 2.{% 邏輯相關 %}
# 模板語法可以傳遞的后端數據類型
# 包括基本數據類型、函數(自動加括號執行,并傳遞返回值,不支持傳參)、類(自動實例化)、對象(可以調用對象自動傳參或者無參方法 eg:__str__(self))
# 原則,先判斷接收的變量名是否可以添加'()'調用,能調用就調用。
# django模板語法的取值,只能使用'.'取值,固定格式
'''
<p>{{ dict1.key1 }}</p>
<p>{{ list1.index1 }}</p>
<p>{{ dict1.key1.index1.keyx }}</p>
'''
# 可以'.'鍵'.'索引或者混用
過濾器
# 即模板語法內置方法
# 基本語法:{{ 數據|過濾器:參數 }}
s = 'abc'
<p>{{ s|lenth }}</p> # 統計長度,即 <p>3</p>
<p>{{ n|default:'空' }}</p> # 默認值,當n為True,就傳遞n的值,否則傳遞default值
<p>{{ file_size|filesizeformat }}</p> # 傳遞格式化后的文件大小
<p>{{ current_time|date:'Y-m-d H:i:s' }}</p> # 傳遞格式化后的時間
<p>{{ l|slice:'0:4:2' }}</p> # 傳遞切片
<p>{{ info|truncatechars:9 }}</p> # 傳遞截取后的字符,效果:123456...
<p>{{ info|truncatewords:3 }}</p> # word1 word2 word3...(長度不含...,而且切取依據是空格)
<p>{{ info|cut:' ' }}</p> # 傳遞移除' '之后的字符
<p>{{ list1|join:'$' }}</p> # 傳遞用'$'連接各元素后的字符串
<p>{{ n|add:2 }}</p> # 傳遞n+1
<p>{{ s|add:info }}</p> # 傳遞s+info
<p>{{ h1|safe }}</p> # 取消轉義
# 后端取消轉義
html_code = '<h1>ahhahahahah</h1>'
h2 = mark_safe(html_code)
標簽
# for循環
'''
{% for li in list1 %}
{{ forloop }}
{% endfor %}
'''
'''
{% for li in list1 %}
<p>{{ li }}</p>
{% endfor %}
'''
# if判斷
'''
{% if bllo1 %}
<p>hahahah</p>
{% elif %}
<p>wahahahahahha</p>
{% else %}
<p>xixiixixxiix</p>
{% endif %}
'''
# for + if
'''
{% for li in list %}
{% if forloop.first %}
<p>第一次循環</p>
{% elif forloop.last %}
<p>最后一次循環</p>
{% else %}
<p>{{ li }}</p>
{% endif %}
{% empty %}
<p>for循環的對象是空</p>
{% endfor %}
'''
'''
{% for foo in dict1.keys/.values/.items %}
{{ forloop }}
{% endfor %}
'''
# with語法
'''
{% with dict1.key2.index1.keyx as s %}
<p>s</p>
<p>s</p>
<p>s</p>
<p>s</p>
<p>s</p>
<p>s</p>
{% endwith %}
'''
自定義過濾器、標簽、inclusion_tag
'''
1.在應用下創建一個templatetags文件夾
2.在該文件夾內創建任意名稱的py文件 eg: mytag.py
3.在該py文件內:
from django import template
register = template.Library()
'''
# 自定義過濾器(最多兩個參數)
@register.filter(name='sum_filter')
def my_sum(a1,a2):
return a1 + a2
# 自定義過濾器調用
{% load mytag %}
<p>{{ a1|sum_filter:a2 }}</p>
# 自定義標簽(可以有多個參數)
@register.simple_tag(name='my_tag')
def index(a, b, c, d):
return f'{a}/{b}/{c}/w0obha2h00'
# 自定義標簽的調用
{% load mytag %}
<p>{% my_tag 'a' 'b' 'c' 'd' %}</p>
# 自定義inclusion_tag
@register.inclusion_tag('left_menu.html')
def left(n):
data = [f'第{i}項' for i in range(n)]
return locals() #將data傳遞給left_menu.html 即 return {'data':data}
# 定義渲染工具頁面 left_menu.html
'''
<ul>
{% for datum in data %}
<li>{{ datum }}</li>
{% endfor %}
</ul>
'''
# 自定義inclusion_tag調用
{% load mytag %}
{% left 9 %}
模板的繼承
# 模板頁面設置
'''
<div class="panel-body">
{% block var_content %}
<div class="jumbotron">
<h1>Hello, world!</h1>
<p>...</p>
<p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
</div>
{% endblock %}
</div>
'''
# 實例頁面
'''
{% extends 'home.html' %}
{% block var_content %}
<h1>注冊頁面</h1>
{% endblock %}
'''
# 一般情況下,模板頁面應該至少有三塊可以被修改的區域
'''
1.css區域
{% block css %}
{% endblock %}
2.html區域
{% block content %}
{% endblock %}
3.js區域
{% block js %}
{% endblock %}
'''
模板的導入
# 即將模板頁面模塊化,然后實例頁面直接使用語法將模板頁面所有代碼直接導入
{% include 'part.html' %}