Django模板導入和替換、以及對數據庫的增加、查看


靜態文件引入的3中方式:例如對html模板里面對css樣式的引入

STATIC_URL = '/static666/'
STATICFILES_DIR=[
os.path.join(BASE_DIR,'static')
]

目的是在settings里面名字變動時,模板里面能時時進行檢測和變動,從而不影響頁面css樣式的加載

<head>
    <meta charset="UTF-8">
    <title>模板的導入和繼承</title>
    <!--方式一:-->
{#    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">#}

    <!--方式二:就是settings里面STATIC_URL = '/static666/'后面的值無論如何變動都不會有影響,對應css樣式的加載,都能識別到STATIC_URL地址的變動-->
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css'%}">
{#    返回值:/atic/bootstrap-3.3.7-dist/css/bootstrap.min.css#}

    <!--方式三:-->
     <link rel="stylesheet" href="{% get_static_prefix %}/bootstrap-3.3.7-dist/css/bootstrap.min.css">
{#    返回值:/static#}

    <style>

    </style>
</head>

 圖解說明:

模板的導入:

模板導入:
  1 把公共部分,放到html里,比如叫 left.html
  2 想在哪里用 {% include 'left.html' %}

 

正常情況下模板里面直接寫html語句

要實現的就是,將html中一段代碼單獨放在一個html文件中,其他地方使用的時候去導入就OK:

<div class="panel panel-danger">
                <div class="panel-body">
                    Panel content
                </div>
                <div class="panel-footer">Panel footer</div>
            </div>

            <div class="panel panel-success">
                <div class="panel-body">
                    Panel content
                </div>
                <div class="panel-footer">Panel footer</div>
            </div>

            <div class="panel panel-primary">
                <div class="panel-body">
                    Panel content
                </div>
                <div class="panel-footer">Panel footer</div>
            </div>
left.html單獨抽出來作為引用部分
<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
            #頁面里面直接去調用(在哪個位置調用,就在哪個位置顯示)
            {% include 'left.html' %}

        </div>
</div>    

模板的繼承:

頁面切換,母版是固定不動的,所以一些固定不變的可以讓他繼承不變,相當與空白的盒子,讓后面要用的繼承這個盒子,再寫內容

繼承不步驟:
母版繼承:
		1  寫一個母版 base.html
		2 要更改的地方(    )
		{% block base %}
			母版的盒子里也可以寫東西
		{% endblock %}
		3 調用:
			3.1 寫在第一行 {%extends 'base.html' %}
			3.2 		{% block base %}
			
						自己的東西
						
						{% endblock my_head%}
			3.3 還想用母版里的內容({{block.super}} 放在那,原來母版里的東西,就會渲染在哪)
					{% block base %}
						{{block.super}}
						自己的東西						
					{% endblock my_head%}
			3.4 如過不繼承盒子,它會用原來的內容,如果繼承了,沒寫自己的東西,它會空白
			3.5 盒子再繼承時,跟順序無關

例如下面:

首先,定義一個母模板base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>母模板樣式</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <style>
        .head {
            height: 100px;
            width: 100%;
            background-color: deepskyblue;
        }

    </style>
</head>
<body>

<div class="head"></div>

<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
            {% block base_left %}
                母模板原col-md-3左側內容
            {% endblock %}
        </div>

        <div class="col-md-9">
            {% block base_right %}
                母模板原col-md-9右側內容
            {% endblock base_right %}
        </div>

    </div>

</div>

</body>
</html>

其次,定義一個子模板order.html,並配置

<!--先導入父模板-->
{% extends 'base.html' %}
<!--指定重寫繼父模板固定那哪一塊兒內容,重新寫自己的新內容-->
{% block base_left %}
    <!--默認會覆蓋掉父模板對應位置的內容,如果要保留原有內容可以寫block.super-->
    {{ block.super }}
    <hr>
    <!--本頁面新增內容-->
    繼承過來的左側新頁面,自己的新內容
{% endblock  %}


<!--結束時候另外一種寫法,endblock后面可以指定結束的的盒子名稱(也可以不寫)-->
{% block base_right %}
    {{ block.super }}
    <hr>
    繼承過來的右側新頁面,自己的新內容
{% endblock base_right%}

最后,實現子模板繼承母模板的樣式,並且在繼承的基礎上可以重寫自己頁面的新內容

數據庫的增加:

models.py里面的先配置數據庫表的字段及類型

from django.db import models

# Create your models here.
from django.db import models
class Book(models.Model):
    nid=models.AutoField(primary_key=True)
    name=models.CharField(max_length=40)
    price=models.DecimalField(max_digits=5,decimal_places=2)
    pub_date=models.DateField()
    author=models.CharField(max_length=40)
    publish=models.CharField(max_length=60)

views.py函數里面對數據的增加操作

from django.shortcuts import render

# Create your views here.
from app01.models import *

def index(request):
    #數據庫增加
    #方法1:(推薦使用第一種方式)

    Book.objects.create(name='書4',price=56,pub_date='1992-10-12',author='作者1',publish='人民出版社')
    import datetime #傳字符串必須是:2014-09-18,也可以傳datetime類型
    now = datetime.datetime.now()
    Book.objects.create(name='書9',price=25.4,pub_date=now,author='作者9',publish='中央出版社99')
    book=Book.objects.all().values('name','price') #<QuerySet [{'name': '書1', 'price': Decimal('23.40')}, {'name': '書1', 'price': Decimal('23.40')},
    print(book)



    #方法2:(最后記得要保存)
    book=Book(name='書3',price=30,pub_date='2001-01-12',author='作者3',publish='上海出版社')
    print(book,type(book))
    book.save()

     return render(request,'index.html')

數據庫的查詢:

views.py對數據庫的查詢操作

# Create your views here.
from app01.models import *

def index(request):

    #數據查看
    #方法1:filter
    filter(queryset對象)相當於sql的where后面傳的參數,是and的關系
    books=Book.objects.filter(publish='中央出版社',)
    print(books) #<QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]> 查看的是所有滿足條件的列表

    print(books.first())  #Book object 取出列表中第一個,就對行啊
    print(books[0])  #Book object同上面一樣

    print(books.first().nid) # 1
    print(books[0].nid) #同上面一樣


    #方法2:get后面條件參數,必須是數據庫里面是唯一的一個,不然會報錯
    book = Book.objects.get(name='書1') #例如:這種就會報錯
    book=Book.objects.get(nid=4)
    print(type(book))  #<class 'app01.models.Book'>
    print(book.name)


    #方法3:
    #拿所有的 - -queryset對象
    book=Book.objects.all()
     # first() 從queryset里取出第一個值---->book對象
    book=Book.objects.all().first()
    print(book) #Book object
    print(book.nid) #1
    print(book)# #[<Book: Book object>, <Book: Book object>,..
    book = Book.objects.all().values('name','price')
    print(book)  #<QuerySet [{'name': '書1', 'price': Decimal('23.40')}, ..
    # 一旦返回是queryset對象,可以繼續點它的方法
    book = Book.objects.all().values('name', 'price').filter(name='書1')
    print(book)

    #exclude查找排除誰之外的所有結果
    book=Book.objects.all().exclude(author='作者1')
    print(book.first().nid) #3


    #order_by默認是從小到大,想要從打到小-
    book = Book.objects.all().order_by('price')
    book=Book.objects.all().order_by('-price')
    print(book.first().name)

    # count 計算有多少條數據信息
    book=Book.objects.all().count()
    print(book) #29
    book=Book.objects.all().last()
    print(book.name)

    #exists判斷queryset里有沒有數據,沒有就false,有就是true
    res=Book.objects.all().exists()
    print(res)  #true

    #values_list:是元祖的形式
    book=Book.objects.all().values_list('name','price') #結果[(),()]里面是元祖
    print(book.order_by('price'))

    #distinct去重
    #去重前查詢結果
    book=Book.objects.values('publish') #<QuerySet [{'publish': '中央出版社'}, {'publish': '中央出版社'}, {'publish': '上海出版社'},
    #去重后查詢結果
    book=Book.objects.values('publish').distinct() #<QuerySet [{'publish': '中央出版社'}, {'publish': '上海出版社'}, {'publish': '人民出版社'},
    print(book)

    #reverse反轉要放到order_by后面
    book=Book.objects.all().order_by('-price','pub_date').values_list().reverse()
    print(book)

    return render(request,'index.html')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM