1. 程式人生 > >母版,單表操作

母版,單表操作


上節回顧:(模板層)
1 模板之變數---{{ }}
-支援數字,字串,布林型別,列表,字典---相當於對它進行了列印
-函式--->相當於加括號執行(不能傳引數)
-物件--->記憶體地址,(如果重寫__str__方法,列印的就是返回的內容)
2 過濾器
-length---計算長度
-default----設預設值
-filesizeformat---把數字轉成檔案大小格式
-截斷字元---最少是三
-截斷單詞
-data----格式化日期型別
-add-----數字,字串相加
-slice----切片,首,尾,步長 '1:-1:2'
-safe-----把前端程式碼渲染到頁面,而不是直接顯示
3 標籤
-for --用法跟python一樣
-if --用法跟python一樣
-with --相當於取別名
4 自定義標籤
-1 在app下建立一個模組,名字必須叫templatetags
-2 建立任意一個py檔案,my_tags.py
-3 匯入:from django.template import Library
-4 註冊:register=Library()
-5 寫一個函式,用register.simple_tag(name=可以寫一個別名),裝飾一下
-6 使用(重啟)
-7 在模板裡:{%load my_tags%}
-8 {% 函式名字或者別名 %},傳參,用空格分割
5 自定義過濾器
-1 在app下建立一個模組,名字必須叫templatetags
-2 建立任意一個py檔案,my_tags.py
-3 匯入:from django.template import Library
-4 註冊:register=Library()
-5 寫一個函式,用register.filter(name=可以寫一個別名),裝飾一下
-6 使用(重啟)
-7 在模板裡:{%load my_tags%}
-8 {{ 函式名字或者別名 }},傳參,最多傳兩個引數{{'引數一'|過濾器名字:'引數二'}}
6 過濾器可以用在if判斷中,標籤不能


今日內容:
1 模版匯入-->寫了一個好看的元件,可以複用,
1 寫一個模板
2 在模板中:{% include '模板的名字'%}
2 模板的繼承
1 寫一個母版,留一個可擴充套件的區域(盒子),可以留多個盒子(留的越多,可擴充套件性越高)
{%block 名字%}
可以寫內容
{%endblock%}
2 在子模板中使用:
{%block 名字%}
子模板的內容
{%endblock 名字%}

3 靜態檔案相關
1 寫死靜態檔案:<link rel="stylesheet" href="/static/css/mycss.css">
2 使用 static標籤函式:
-{%load static%}
#static返回值,會拼上傳參的路徑
-{% static "傳參"%}
3 使用get_static_prefix 標籤
-{%load static%}
#get_static_prefix返回值是:靜態檔案的地址,相當於/static/
-{% get_static_prefix %}css/mycss.css
4 單表操作;
-資料遷移命令:
-python3 manage.py makemigrations --->只是對變化做一個記錄,記錄檔案在app的migrations
-python3 manage.py migrate ---->把更改提交到資料庫
-python3 manage.py showmigrations ---->檢視那個沒有提交到資料庫

-查詢api
<1> all(): 查詢所有結果
<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的物件
<3> get(**kwargs): 返回與所給篩選條件相匹配的物件,返回結果有且只有一個,如果符合篩選條件的物件超過一個或者沒有都會丟擲錯誤。
<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的物件
<5> order_by(*field): 對查詢結果排序('-id')
<6> reverse(): 對查詢結果反向排序
<8> count(): 返回資料庫中匹配查詢(QuerySet)的物件數量。
<9> first(): 返回第一條記錄
<10> last(): 返回最後一條記錄
<11> exists(): 如果QuerySet包含資料,就返回True,否則返回False
<12> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,執行後得到的並不是一系列
model的例項化物件,而是一個可迭代的字典序列
<13> values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列
<14> distinct(): 從返回結果中剔除重複紀錄

-基於雙下劃線的模糊查詢
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)大於100
Book.objects.filter(price__lt=100)小於100
Book.objects.filter(price__gte=100)大於等於
Book.objects.filter(price__lte=100)小於等於
Book.objects.filter(price__range=[100,200])在**範圍內
Book.objects.filter(title__contains="python")查詢結果有python欄位
Book.objects.filter(title__icontains="python")忽略大小寫有python欄位
Book.objects.filter(title__startswith="py")以什麼開頭
Book.objects.filter(pub_date__year=2012)按年查詢


作業:
1 模板的匯入,繼承,寫一遍,整理到部落格上
2 單表查詢:
1 查詢老男孩出版社出版過的價格大於200的書籍

2 查詢2017年8月出版的所有以py開頭的書籍名稱

3 查詢價格為50,100或者150的所有書籍名稱及其出版社名稱

4 查詢價格在100到200之間的所有書籍名稱及其價格

5 查詢所有人民出版社出版的書籍的價格(從高到低排序,去重)