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