Django 笔记4 -- 模板
Django 筆記4 – 模板
Django 系列筆記是筆者學(xué)習(xí)、實(shí)踐使用 Django 的相關(guān)筆記,大量參考了知了課堂的《Django零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)》教程。
參考文檔:
Django官方文檔(英文)
Django 中文文檔
一、模板
1、模板查找路徑配置
配置TEMPLATES:
項(xiàng)目的settings.py文件中,有一個(gè) TEMPLATES 配置,這個(gè)配置包含了模板引擎的配置,模板查找路徑的配置,模板上下文的配置等。
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]DIRS: 一個(gè)列表,在這個(gè)列表中可以存放所有的模板路徑,以后在視圖中使用 render 或者 render_to_string 渲染模板的時(shí)候,會(huì)在這個(gè)列表的路徑中查找模板。
APP_DIRS: 默認(rèn)為True,這個(gè)設(shè)置為True后,會(huì)在 INSTALLED_APPS 的安裝了的APP下的 templates 目錄中查找模板。
查找順序: 查找一個(gè)模板,先在 DIRS 這個(gè)列表中依次查找路徑下有沒有這個(gè)模板,如果有,就返回。如果DIRS列表中所有的路徑都沒有找到,那么會(huì)先檢查當(dāng)前這個(gè)視圖所處的 app 是否已經(jīng)安裝,如果已經(jīng)安裝了,那么就先在當(dāng)前這個(gè) app 下的 templates 文件夾中查找模板,如果沒有找到,那么會(huì)在其他已經(jīng)安裝了的 app 中查找。如果所有路徑下都沒有找到,那么會(huì)拋出一個(gè) TemplateDoesNotExist 的異常。
2、渲染模板
render_to_string():
from django.template.loader import render_to_string from django.http import HttpResponse# 將模板編譯后渲染成Python的字符串格式后,再包裝成HttpResponse對(duì)象 html = render_to_string("detail.html") return HttpResponse(html)render():
from django.shortcuts import render# 直接將模板渲染成字符串并包裝成HttpResponse對(duì)象 return render(request,'list.html')二、DTL 模板
1、變量
- Django 在渲染模板的時(shí)候,可以傳遞變量對(duì)應(yīng)的值過去進(jìn)行替換。變量的命名規(guī)范和 Python 非常類似,只能是阿拉伯?dāng)?shù)字和英文字符以及下劃線的組合,不能出現(xiàn)標(biāo)點(diǎn)符號(hào)等特殊字符。變量需要通過視圖函數(shù)渲染,視圖函數(shù)在使用 render 或者render_to_string 的時(shí)候可以傳遞一個(gè) context 的參數(shù),這個(gè)參數(shù)是一個(gè)字典類型。以后在模板中的變量就從這個(gè)字典中讀取值的。
- 模板中使用變量,格式:{{ key }}
- key 是一個(gè)字典,通過 key.key 得到 key 這個(gè)字典的鍵對(duì)應(yīng)的值
- key 是一個(gè)對(duì)象,通過 key.xx 得到 key 這個(gè)對(duì)象的 xx 屬性/方法。
- key 是一個(gè)列表/元組,通過 key.1,得到 key 這個(gè)列表/元組的第1個(gè)值
- 如果 key 中沒有指定的東西,返回一個(gè)空的字符串
2、模板標(biāo)簽
if標(biāo)簽: if標(biāo)簽中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判斷運(yùn)算符。
{% if ..... %}<p> .... </p>{% else %}<p> .... </p>{% endif %}for…in…標(biāo)簽: 可以遍歷列表、元組、字符串、字典等一切可以遍歷的對(duì)象
- forloop.counter:當(dāng)前循環(huán)的下標(biāo),以1作為起始值。
- forloop.counter0:當(dāng)前循環(huán)的下標(biāo),以0作為起始值。
- forloop.first:是否是第一次遍歷。
- forloop.last:是否是最后一次遍歷。
**for…in…empty標(biāo)簽:**遍歷的對(duì)象如果沒有元素的情況下,會(huì)執(zhí)行empty中的內(nèi)容
{% for ... in ... %}...{% empty %}...{% endfor %}with標(biāo)簽: 復(fù)雜的變量緩存到一個(gè)變量上
{% with 變量名=復(fù)雜的變量 %}<p>{{ 變量名 }}</p>{% endwith %}url標(biāo)簽: url反轉(zhuǎn),通常用于 href 屬性
<a href="{% url '視圖函數(shù)' %}"> ... </a># url反轉(zhuǎn),使用關(guān)鍵字參數(shù) <a href="{% url '視圖函數(shù)' key=value %}">圖書3、模版過濾器
通過濾器可以對(duì)數(shù)據(jù)進(jìn)行處理,類似于函數(shù)
add 過濾器: 變量加上一個(gè)值
{{ name |add: 'value' }}date 過濾器: 日期轉(zhuǎn)化成指定格式的字符串
# 數(shù)據(jù) context = {"birthday": datetime.now()}# 轉(zhuǎn)化成 2018-01-01 格式 {{ birthday|date:"Y-m-d" }}length 過濾器: 獲取一個(gè)列表/元組/字符串/字典的長(zhǎng)度
{{ list|length }}4、模板繼承
父模板:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body>{# 開一個(gè)口,子模板中自定義 #}{% block main %}{% endblock %}{# 也可以寫成下面這樣,更明了 #}{% block main %}{% endblock main %} </body> </html>子模板:
# 指定繼承與那個(gè)模板 {% extends "base.html" %}# 選擇父模板中開的口子,自定義內(nèi)容 {% block main %}自定義內(nèi)容{% endblock %}三、加載靜態(tài)文件
1、靜態(tài)文件
在一個(gè)網(wǎng)頁(yè)中,不僅僅只有一個(gè) html 骨架,還需要 css 樣式文件,js 執(zhí)行文件以及圖片等。因此在 DTL 中加載靜態(tài)文件是一個(gè)必須要解決的問題。在 DTL 中,使用 static 標(biāo)簽來加載靜態(tài)文件。要使用 static 標(biāo)簽格式 {% load static %}。
2、靜態(tài)文件路徑配置
GOOD LUCK!
總結(jié)
以上是生活随笔為你收集整理的Django 笔记4 -- 模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecshop根目录调用_ECSHOP各文
- 下一篇: centos7重新加载服务的命令_Cen