模版之過濾器
????????語法:
{{obj|filter__name:param}} 變量名字|過濾器名稱:變量
default
????????如果一個變量是false或者為空,使用給定的默認值。否則,使用變量的值。例如:
{{ value|default:"nothing"}}
length
????????返回值的長度。它對字符串和列表都起作用。例如:
{{ value|length }}
filesizeformat
????????將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
{{ value|filesizeformat }}
date
????????如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d"}}
slice
????????如果 value=”hello world”
{{ value|slice:"2:-1"}}
truncatechars
????????如果字符串字符多于指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“…”)結尾。
{{ value|slice:"2:-1"}}
safe
value="<a href="">點擊</a>"
{{ value|safe}} ?
模版之標簽
????????標簽看起來像是這樣的: {% tag %},標簽比變量更加復雜:一些在輸出中創建文本,一些通過循環或邏輯來控制流程,一些加載其后的變量將使用到的額外信息到模版中。一些標簽需要開始和結束標簽 (例如{% tag %} ...標簽 內容 ... {% endtag %})
for標簽
????????遍歷每一個元素
{% for person in person_list %}<p>{{ person.name }}</p>
{% endfor %}
????????遍歷一個字典:
{% for key,val in dic.items %}<p>{{ key }}:{{ val }}</p>
{% endfor %}
?
{% for foo in d.keys %}<p>{{ foo }}</p>
{% endfor %}
?
{% for foo in d.values %}<p>{{ foo }}</p>
{% endfor %}
?
{% for foo in d.items %}<p>{{ foo }}</p>
{% endfor %}
for...empty
{% for person in person_list %}<p>{{ person.name }}</p>
?
{% empty %}<p>sorry,no person here</p>
{% endfor %}
if 標簽
????????會對一個變量求值,如果它的值是True(存在、不為空、且不是boolean類型的false值),對應的內容塊會輸出。
{% if num > 100 or num < 0 %}<p>無效</p>
{% elif num > 80 and num < 100 %}<p>優秀</p>
{% else %}<p>湊活吧</p>
{% endif %}
-
if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
with
{% with d.hobby.3.info as nb %}<p>{{ nb }}</p><p>{{ d.hobby.3.info }}</p>
{% endwith %}
-
在with語法內就可以通過as后面的別名快速的使用到前面非常復雜獲取數據的方式
csrf_token
{% csrf_token%}
-
這個標簽用于跨站請求偽造保護
模版導入入和繼承? ? ?
????????寫一個被導入的模板adv.html
<div class="adv"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">Panel title</h3></div><div class="panel-body">Panel content</div></div><div class="panel panel-danger"><div class="panel-heading"><h3 class="panel-title">Panel title</h3></div><div class="panel-body">Panel content</div></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">Panel title</h3></div><div class="panel-body">Panel content</div></div>
</div>
????????寫一個模板來導入base.html,用來導入adv.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="/static/js/jquery_3.7.1_jquery.min.js"></script><link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css"><script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script><style>* {margin: 0;padding: 0;}
?.header {height: 50px;width: 100%;background-color: #369;}</style>
</head>
<body>
<div class="header"></div>
<div class="container"><div class="row"><div class="col-md-3">{% include 'adv.html' %}</div><div class="col-md-9">{% block conn %}<h1>你好</h1>{% endblock %}</div></div>
</div>
</body>
</html>
????????寫一個模板index.html,來繼承base.html
{% extends 'base.html' %}
?
{% block conn %}{{ block.super }}
?
我是主頁
?
{% endblock conn%}
常見的查詢方法
查詢方法 | 描述 |
all() | 查詢所有數據 |
filter() | 帶有過濾條件的查詢 |
get() | 直接拿數據對象 但是條件不存在直接報錯 |
first() | 拿queryset里面第一個元素 |
distinct() | 去重 |
order_by | 排序 |
reverse() | 反轉 |
count() | 統計個數 |
exclude | 排除 |
exist | 判斷是否存在 |
?
基于雙下滑線的查詢
????????
查詢參數 | 描述 |
age__gt= | 大于 |
age__lt= | 小于 |
age__gte= | 大于等于 |
age__lte= | 小于等于 |
age__in=[數字1,數字2,數字3] | 成員運算 |
age__range=[數字1,數字2] | 范圍運算 |
字段名__contains= | 包含 |
字段名__startswith= | 以……開頭 |
字段名__endswith= | 以……結尾 |
日期字段__day= | 查天數 |
日期字段__month= | 查月份 |
日期字段__year= | 查年份 |