django之模板的匯入和繼承,單表操作,靜態檔案
阿新 • • 發佈:2018-12-21
一,模板的匯入
把需要匯入的那一部分程式碼寫到新的html檔案下面,在匯入的那個位置寫({% include '檔名' %})即可
下面是總文件
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>tamplate</title> <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css"> <style> h1 { text-align: center; } </style> </head> <body> <div class="container-fluid"> <div class="row"> <div class="head"> <div class="page-header"> <h1>正頁的標題<small>副標題</small></h1> </div> </div> {% include 'template2.html' %} <div class="col-md-9"> </div> </div> </div> </body> </html>
下面是需要匯入的那部分程式碼
<div class="col-md-3"> <div class="panel panel-primary"> <div class="panel-body"> 棄醫從文 </div> <div class="panel-footer">棄醫從文</div> </div> <div class="panel panel-success"> <div class="panel-body"> 狂人不狂 </div> <div class="panel-footer">狂人不狂</div> </div> <div class="panel panel-info"> <div class="panel-body"> 狂人不狂 </div> <div class="panel-footer">狂人不狂</div> </div> <div class="panel panel-warning"> <div class="panel-body"> 淋漓盡致 </div> <div class="panel-footer">淋漓盡致</div> </div> <div class="panel panel-danger"> <div class="panel-body"> 一針見血 </div> <div class="panel-footer">一針見血</div> </div> </div>
二,模板的繼承
寫一個母版,留一個可以擴充套件的盒子,在子模板中對盒子進行設定
下面是母版
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>tamplate</title> <link rel="stylesheet" href="../static/bootstrap-3.3.7-dist/css/bootstrap.css"> <style> h1 { text-align: center; } </style> </head> <body> <div class="container-fluid"> <div class="row"> <div class="head"> <div class="page-header"> <h1>正頁的標題<small>副標題</small></h1> </div> </div> {% include 'template2.html' %} <div class="col-md-9"> <div class="right_top" style="height: 100px;background: #5bc0de"> {#這是給後面繼承此頁面的東西新增一個可以操控的盒子#} {% block content_top %} {% endblock %} </div> <div class="right_middle" style="height: 200px; background: #5cb85c"> </div> {#一個頁面可以設定多個操控的盒子#} {% block content %} {% endblock %} </div> </div> </div> </body> </html>
下面是對母版的繼承
{#直接繼承base.html檔案中的佈局 #} {% extends 'base.html' %} {# 設定佈局中,content盒子,這裡新增內容 #} {% block content %} <p>這是9的區域</p> <p>這是9的區域</p> {# 這是把父級這個盒子裡面存在的內容繼承過來,可以繼承多次,沒繼承一次,出現一次內容 #} {{ block.super }} <p>這是9的區域</p> <p>這是9的區域</p> <p>這是9的區域</p> <p>這是9的區域</p> {{ block.super }} {% endblock content%} {# 一個頁面可以設定多個盒子,多個盒子的可操控的可能就多了 #} {% block content_top %} 我是模版一內容頭部 {% endblock content_top%}
三,靜態檔案相關的匯入
可以有三種方法,1,直接把路徑寫死了,2,經過傳參進行路徑的拼接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
四,單表操作: 1,資料遷移命令:
python3 manage.py makemigrations--->只是對變化做一個記錄,記錄檔案在app的migrations
python3 manage.py migrate---->把更改提交到資料庫
python3 manage.py showmigrations----->查詢哪個沒有提交到資料庫
在django框架中,也可以直接寫一個Py檔案進行右擊執行,在主目錄下面建立一個Py檔案然後裡面加入
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings") import django django.setup() from app01 import models
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "work.settings") import django django.setup() from app1 import models # 新增的兩種方式 # 1,返回的結果是一個物件 # book = models.Book.objects.create(name='西遊記', price=76, publish='人民出版社', author='曹雪芹', create_data='2018-09-17') # print(book.name) # book = models.Book(name='紅樓夢', price=56, publish='清華大學出版社', author='曹雪芹', create_data='2018-06-04') # book.save() # print(book.name) # 時間格式可以傳字串,也可以傳時間格式 # import datetime # ctime = datetime.datetime.now() # book = models.Book.objects.create(name='水滸傳', price=76, publish='人民出版社', author='施耐庵', create_data=ctime) # print(book.name) # 刪除叫西遊記的這本書(可以不加first,加上表示只刪除第一個,不加則叫西遊記的書全部刪除) # ret = models.Book.objects.filter(name='西遊記').first().delete() # print(ret) # 返回值有兩個值,第一個是影響的行數,第二個是刪除的物件 # 下面把西遊記這本書的作者改了,有兩種方法1,直接Update更改,2,先搜尋出來然後在更改,改完必須儲存 # ret = models.Book.objects.filter(name='西遊記').update(author='吳承恩') # print(ret) # 返回值是更改的個數 # ret = models.Book.objects.filter(name='西遊記').first() # ret.price = 23.8 # ret.save() # 接下來是查詢,查詢的方法需要記憶的內容比較多,同時也是比較重要的內容 # all()查詢所有結果,返回值是把所有物件查出來,然後放到一個queryset物件裡面去 # ret = models.Book.objects.all() # print(ret) # filter()尋找滿足括號裡面條件的值,裡面可以傳多個引數,用逗號分隔,他們之間是and的關係, # 而且搜尋出來的結果可能是一個列表,然後通過方括號取值,不支援負號取值 # ret = models.Book.objects.filter(name='西遊記')[0] # print(ret) # 輸出的值是models中__str__的返回值.本身是一個物件,不具有.方法 # ret.query -->queryset物件列印sql(就是把其中內部的程式碼打出來) # get() 有且只有一個值的時候才可以使用,如果只有一個值(多個值時會報錯),則返回的是一個物件而不是queryset物件,一般用在id的查詢 # ret = models.Book.objects.get(id=2) # print(ret) # exclude()查詢的是不滿足括號裡面的所有值,如果是多個條件的話,每個條件之間的and並且直接取反 # ret = models.Book.objects.exclude(name='西遊記') # order_by 按價格升序排列(如果加負號,則是降序排列) # ret=models.Book.objects.all().order_by('price') # print(ret) # queryset物件可以繼續 點 方法取出名字叫西遊記並且升序排列 # ret=models.Book.objects.all().order_by('price').filter(name='西遊記') # print(ret) # reverse()經過排序過的物件可以使用這個對其進行反序排列 # ret = models.Book.objects.all().order_by('-price').reverse() # print(ret) # count 查詢結果個數 # ret=models.Book.objects.all().filter(name='西遊記').count() # print(ret) # last 返回book物件(查詢結果中最後一個值) # ret=models.Book.objects.all().last() # 查詢的結構是否存在,返回的結果是布林值 # print(ret)objects.filter(name='三國演義').exists() # print(ret) # values(*field): queryset物件裡套字典(字典裡面存在的內容) # ret=models.Book.objects.all().values('name','price') # ret=models.Book.objects.all().values('name') # print(ret) # value_list queryset物件裡套元組 # ret=models.Book.objects.all().values_list('name','price') # print(ret) # distinct() 必須完全一樣,才能去重(把括號裡面重複的內容只顯示一個) 只要帶了id,去重就沒有意義了 # ret=models.Book.objects.all().values('name').distinct() # print(ret) # =========基於雙下劃線的模糊查詢 # 查詢價格大於89 的書 # ret=models.Book.objects.filter(price__gt='89') # print(ret) # 查詢價格小於89 的書 # ret=models.Book.objects.filter(price__lt='89') # print(ret) # ret=models.Book.objects.filter(price__lt='89',price='89') # 小於等於 # ret=models.Book.objects.filter(price__lte='89') # 大於等於, # ret = models.Book.objects.filter(price__gte='89') # print(ret) # in 在XX中 # ret=models.Book.objects.filter(price__in=['23.8','89','100']) # print(ret) # print(ret.query) # range 在XX範圍內 between and # ret=models.Book.objects.filter(price__range=[50,100]) # print(ret.query) # contains 查詢名字有'%紅%'的書 # ret=models.Book.objects.filter(name__contains='紅') # print(ret) # print(ret.query) # icontains 查詢名字帶p的書,忽略大小寫 # ret=models.Book.objects.filter(name__icontains='P') # print(ret) # print(ret.query) # startswith 以XX開頭 # ret=models.Book.objects.filter(name__startswith='紅') # print(ret) # print(ret.query) # endswith 以XX結尾 # ret=models.Book.objects.filter(name__endswith='夢') # print(ret) # pub_date__year 按年查詢 # ret=models.Book.objects.filter(create_data__year='2017') # print(ret)