聲明:部分信息來源這篇博客https://www.cnblogs.com/maple-shaw/articles/9333821.html
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)網(wǎng)站建設(shè)、手機網(wǎng)站制作設(shè)計、網(wǎng)頁設(shè)計、品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。Django框架的設(shè)計模式借鑒了MVC框架的思想,也是分成三部分,來降低各個部分之間的耦合性。
Django框架的不同之處在于它拆分的三部分為:Model(模型)、Template(模板)和View(視圖),也就是MTV框架。
Model(模型):負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫的對象(ORM)
Template(模版):負(fù)責(zé)如何把頁面展示給用戶
View(視圖):負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r候調(diào)用Model和Template
此外,Django還有一個urls分發(fā)器,它的作用是將一個個URL的頁面請求分發(fā)給不同的view處理,view再調(diào)用相應(yīng)的Model和Template
Django框架圖示
只有兩種特殊符號
{{變量}}
{% 邏輯 %}如for循環(huán)等
注意:當(dāng)模板系統(tǒng)遇到一個(.)時,會按照如下的順序去查詢:
https://docs.djangoproject.com/en/1.11/ref/templates/language/#filters django官方文檔
https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#ref-templates-builtins-filters django過濾器官方文檔1
用來修改變量在html的顯示結(jié)果
語法
語法: {{ 變量(或者字符串等等)|方法名:參數(shù) }}#:前后不可以有空格
default默認(rèn)值過濾器
{{ 變量|default:"nothing"}}#如果value值沒傳的話就顯示設(shè)置的默認(rèn)值nothing
注:在setting.py中TEMPLATES的OPTIONS可以增加一個選項:string_if_invalid:'找不到',可以替代default的的作用。
filesizeformat文件尺寸過濾器
{{ 變量|filesizeformat }}#將值格式化為一個 “人類可讀的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等),大支持單位pB
add
{{ 變量|add:"2" }}#給變量加參數(shù),相當(dāng)于py中的加號,可以數(shù)字運算,字符串拼接,列表拼接
lower
{{ 變量|lower }}#小寫
upper
{{ 變量|upper}}#大寫
title
{{ 變量|title }}#標(biāo)題
ljust
{{ 變量|ljust:"10" }}#左對齊
rjust
{{ 變量|rjust:"10" }}#右對齊
center
{{ 變量|center:"15" }}#居中
length
{{ 變量|length }}#變量長度
slice
{{變量|slice:"2:-1"}}#切片
first
{{ 變量|first }}#取第一個元素
last
{{ 變量|last }}#取最后一個元素
join
{{ 變量|join:" // " }}#使用字符串拼接列表。同python的str.join(list)。
truncatechars
{{ 變量|truncatechars:9}}#如果字符串字符多于指定的字符數(shù)量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結(jié)尾。
date
{{ 變量|date:"Y-m-d H:i:s"}}#日期格式化
safe
假如value = "點我"
{{ 變量|safe}}#Django的模板為了安全會對HTML標(biāo)簽和JS等語法標(biāo)簽進行自動轉(zhuǎn)義,safe能取消django的轉(zhuǎn)義
{% widthratio 100; 1 100%}#先除后乘,需要三個參數(shù)
在app下創(chuàng)建一個名為templatetags的python包;
在python中創(chuàng)建py文件,文件名自定義(my_tags.py);
在my_tags.py文件中配置
from django import template#導(dǎo)入模塊
register = template.Library() #標(biāo)準(zhǔn)語句都不能改
#寫函數(shù)裝飾器
@register.filter
def add_xx(value, arg): # 最多有兩個
return '{}-{}'.format(value, arg)#返回兩個值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{ 'alex'|add_xx:'dsb' }}#通過函數(shù)名使用
@register.filter(name = xxx)#可以直接通過name等于的xxx取引用
def add_xx(value, arg): # 最多有兩個
return '{}-{}'.format(value, arg)#返回兩個值的拼接
#在html使用方式
{% load my_tags %}#引用模塊
{{'alex'|xxx:'dsb'}}#通過賦值的name引用
自定義過濾器只是帶有一個或兩個參數(shù)的Python函數(shù):
for語法
{% for user in user_list %}
- {{ user.name }}
{% endfor %}
Variable | Description |
---|---|
forloop.counter | 當(dāng)前循環(huán)的索引值(從1開始) |
forloop.counter0 | 當(dāng)前循環(huán)的索引值(從0開始) |
forloop.revcounter | 當(dāng)前循環(huán)的倒序索引值(到1結(jié)束) |
forloop.revcounter0 | 當(dāng)前循環(huán)的倒序索引值(到0結(jié)束) |
forloop.first | 當(dāng)前循環(huán)是不是第一次循環(huán)(布爾值) |
forloop.last | 當(dāng)前循環(huán)是不是最后一次循環(huán)(布爾值) |
forloop.parentloop | 本層循環(huán)的外層循環(huán) |
for... empty
{% for book in all_books %}
.....
{% empty %}
沒有相關(guān)的數(shù)據(jù)
{% endfor %}
dango的if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
django的if與python的區(qū)別
python 10>5>1 --> 10>5 and 5>1 true
django 10>5>1 --> 10>5 --> true --> 1>1 false
模板的if&elif&else實例
{% if user_list %}
用戶人數(shù):{{ user_list|length }}
{% elif black_list %}
黑名單數(shù):{{ black_list|length }}
{% else %}
沒有用戶
{% endif %}
with定義一個中間變量,在django模板中有些值,需要多次使用,我們就可以通過with定義變量,方便使用
{% with total=business.employees.count %}
{#將business.employees.count值定義為total可以在語句內(nèi)使用#}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
{#結(jié)束with語句#}
csrf_token標(biāo)簽用于跨站請求偽造保護。(django的保護機制為了防止post請求是從其他端發(fā)送來的,需要一個認(rèn)證,直接發(fā)送,會報403錯誤,加入這個標(biāo)簽代表加入了認(rèn)證方法,就能夠在django中發(fā)送post請求了)
在頁面的form表單里面寫上{% csrf_token %}
{# 注釋內(nèi)容 #}
{#注釋內(nèi)容#}單行注釋,多行就是多敲幾遍
注意事項:
Django的模板語言不支持連續(xù)判斷,即不支持以下寫法:
{% if 10 > 5 > 1 %}
...
{% endif %}
{{ data.items }}
注意:我們通常會在母板中定義頁面專用的CSS塊和JS塊,方便子頁面替換。
子頁面繼承母版,方便使用母版的樣式
{% extends '母板.html' %}
{#輸入這個語句就可以繼承母版.html的樣式 #}
{#通過在母板中使用{% block xxx %}來定義"塊"。
在子頁面中通過定義母板中的block名來對應(yīng)替換母板中相應(yīng)的內(nèi)容。如果不在定義的塊中則不會出現(xiàn)效果#}
注意在母版中需要定義一個塊,子網(wǎng)頁的中數(shù)據(jù)寫一個塊,名稱要與母版的塊名相同才能替換
{#實例,下面就是我們在繼承母版的子頁面,定義的塊中,輸入幾條語句#}
{% block page-main %}
世情薄
人情惡
雨送黃昏花易落
{% endblock %}
組件與母版類似,不同的是,母版比較大,不經(jīng)常變動,而在網(wǎng)頁中我們有些是需要靈活變動的,這時候我們就需要組件來幫忙了,組件本質(zhì)也是繼承一個文件,不同的是組件是較少代碼的繼承
繼承組件語法
{% include '組件.html' %}
在我們一般時候中,需要對靜態(tài)文件設(shè)置一個別名,才可以使用靜態(tài)文件中的文件等,可如果出現(xiàn),別名被改動,我們就需要去html中一個個修改文件導(dǎo)入的名稱,這樣不夠,于是django替我們想到了這個情況,我們可以通過下面幾種模板標(biāo)簽方式,避免這種問題
方式一
{% load static %}
{#導(dǎo)入static方法#}
{#{% static "images/hi.jpg" %}中的static代表著我們的靜態(tài)文件別名,可以隨著我們的修改動態(tài)的變化#}
方式二
{#使用get_static_prefix#}
{% load static %}
{#get_static_prefix代表當(dāng)前的靜態(tài)文件別名,與路徑拼接即可,不過不如方式一方便,不經(jīng)常使用#}
和自定義filter類似,只不過能夠接收更靈活的參數(shù)。
實例
定義注冊simple tag
@register.simple_tag(name="plus")
def plus(a, b, c):
return "{} + {} + {}".format(a, b, c)#將傳進來的參數(shù)進行拼接返回
在模板中使用
{% load app01_demo %}
{% plus "1" "2" "abc" %}
在網(wǎng)頁中我們模板有些樣式是需要跟著服務(wù)端的數(shù)據(jù),靈活變動的,這時我們就需要通過服務(wù)端動態(tài)的給模板返回html代碼,這種方式就是inclusion_tag
動態(tài)返回分頁數(shù)實例:
{% load my_tags %}
{% page 2 %}
{#使用inclusion_tag#}
@register.inclusion_tag('page.html')#返回值返回的頁面
def page(num):
return {'num': range(1, num + 1)}#返回的數(shù)據(jù)
好了,django模板的東西就說到這了,其他沒有說到或遺漏的的,博客內(nèi)有django的官網(wǎng),大家可以去官網(wǎng)具體了解學(xué)習(xí)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。