Django07:模板语法/标签/inclusion_tag/模版的继承
模板語法傳值
列表:l=['a','b','c']
集合:se{‘a’,'yy','ss'}
元組:t=(111,222,333)
render(request.'index,html',locals())
語法規律
{{}}:變量相關
{%%}:邏輯相關
{{func}}
會自動加括號執行,但不支持帶參數;
帶參數會不執行
{{my_class}}
會自動加括號執行(實例化)
總結:內部會判斷當前變量名是否可以加括號調用,如果可以就執行。針對函數名和類名
模板語法取值
d.hobby.3.info
1. 只能使用句點取值“.”, 可以混合使用。
2.“3”是索引,第三個的。
過濾器(最多兩個參數)
過濾器的語法: {{ value|filter_name:參數 }}
default
如果一個變量是false或者為空,使用給定的默認值。 否則,使用變量的值。
{{ value|default:"nothing"}}如果value沒有傳值或者值為空的話就顯示nothing
length
返回值的長度,作用于字符串和列表。
{{ value|length }}
返回value的長度,如 value=['a',?'b',?'c',?'d']的話,就顯示4.
filesizeformat
將值格式化為一個 “人類可讀的” 文件尺寸 (例如?'13 KB',?'4.1 MB',?'102 bytes', 等等)。例如:
{{ value|filesizeformat }}如果 value 是 123456789,輸出將會是 117.7 MB。
slice
切片
{{value|slice:"2:-1"}}date
格式化
{{ value|date:"Y-m-d H:i:s"}}safe
比如:
value = "<a href='#'>點我</a>"
{{ value|safe}}truncatechars
如果字符串字符多于指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾。
參數:截斷的字符數
{{ value|truncatechars:9}}truncatewords
在一定數量的字后截斷字符串。
{{ value|truncatewords:9}}cut
移除value中所有的與給出的變量相同的字符串
{{ value|cut:' ' }}如果value為'i love you',那么將輸出'iloveyou'.
join
使用字符串連接列表,例如Python的str.join(list)
標簽
就是邏輯
for
#for {% for user in user_list %}<li>{{ user.name }}</li> {% endfor %}for循環可用的一些參數:
| forloop.counter | 當前循環的索引值(從1開始) |
| forloop.counter0 | 當前循環的索引值(從0開始) |
| forloop.revcounter | 當前循環的倒序索引值(從1開始) |
| forloop.revcounter0 | 當前循環的倒序索引值(從0開始) |
| forloop.first | 當前循環是不是第一次循環(布爾值) |
| forloop.last | 當前循環是不是最后一次循環(布爾值) |
| forloop.parentloop | 本層循環的外層循環 |
for ... empty
對象是空,無法循環
{% for user in user_list %}<li>{{ user.name }}</li> {% empty %}<li>空空如也</li> {% endfor %}if判斷
if,elif和else
{% if user_list|length > 5 %}七座豪華SUV {% else %}黃包車 {% endif %} {% if user_list %}用戶人數:{{ user_list|length }} {% elif black_list %}黑名單數:{{ black_list|length }} {% else %}沒有用戶 {% endif %}with
定義一個中間變量,多用于給一個復雜的變量起別名。
注意等號左右不要加空格。
#方法一 {% with business.employees.count as total %}{{ total }} employee{{ total|pluralize }} {% endwith %}#方法二 {% with total=business.employees.count %}{{ total }} employee{{ total|pluralize }} {% endwith %}自定義過濾器、標簽
先三步走
1. 在應用下創建一個名字 “必須” 教templatetags文件夾
2. 在該文件夾內創建 “任意” 名稱的py文件 eg : mytag.py
3. 在該py文件內 “必須” 先書寫下面兩句話
from django import template register = template.Library()例子:
py文件:
from django import template register = template.Library()#自定義過濾器,參數最多2個 @register.filter(name="cut") def cut(value, arg):return value.replace(arg, "")@register.filter(name="addSB") def add_sb(value):return "{} SB".format(value)#自定義標簽,可以多個參數@register.simple_tag(name="plus") def index(a,b,c,d):return '%s-%s-%s-%s'%{a,b,c,d}html文件:
#自定義過濾器 {# 先導入我們自定義filter那個文件 #} {% load app01_filters %}{# 使用我們自定義的filter #} {{ somevariable|cut:"0" }} {{ d.name|addSB }}#自定義標簽,多個參數之間,用空格隔開 {% plus 'jason' 123 123 123 %}inclusion_tag
""" 步驟1.在應用下創建一個名字必須為templatetags文件夾2.在該文件夾內,創建一個任意名稱的py文件3.在py文件內固定寫兩行代碼from django import templateregister = template.Library()"""當HTML頁面某一個地方的頁面需要傳參數才能動態的渲染出來,
并且在多個頁面都需要使用該局部,那么就考慮將該局部頁面做成inclusion_tag形式。
templatetags/my_inclusion.py
from django import templateregister = template.Library()@register.inclusion_tag('result.html') def show_results(n):n = 1 if n < 1 else int(n)data = ["第{}項".format(i) for i in range(1, n+1)]return {"data": data}#第二種return locals()templates/snippets/result.html
<ul>{% for choice in data %}<li>{{ choice }}</li>{% endfor %} </ul>templates/index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>inclusion_tag test</title> </head> <body>{% load inclusion_tag_test %}{% show_results 10 %} </body> </html>模版的繼承
note:所有模版,在后臺渲染后,返回前端。
在子頁面中
{% extends 'layouts.html' %}塊(block)
通過在母板中使用{% block? xxx %}來定義"塊"。
在子頁面中通過定義母板中的block名來對應替換母板中相應的內容。
{% block page-main %}<p>世情薄</p><p>人情惡</p><p>雨送黃昏花易落</p> {% endblock %}模板
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Title</title>{% block page-css %}{% endblock %} </head> <body><h1>這是母板的標題</h1>{% block page-main %}{% endblock %} <h1>母板底部內容</h1> {% block page-js %}{% endblock %} </body> </html>規律:一般模板內至少應該有三塊區域
css
html
js
補充:
使用模板的內容
{{block.supper}}
模板導入
頁面某個局部全部導入
{% include 'navbar.html' %}引用:Django模板語言相關內容 - Q1mi - 博客園
總結
以上是生活随笔為你收集整理的Django07:模板语法/标签/inclusion_tag/模版的继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django06:视图层/上传文件/re
- 下一篇: Django08:模型层(ORM)--测