1. 程式人生 > >django之模板的匯入和繼承,單表操作,靜態檔案

django之模板的匯入和繼承,單表操作,靜態檔案

一,模板的匯入

把需要匯入的那一部分程式碼寫到新的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)