日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 笔记4 -- 模板

發布時間:2025/3/12 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 中沒有指定的東西,返回一個空的字符串
# html 模板代碼,profile.html <p>{{ username }}</p># 視圖函數代碼 def view(request):return render(request, 'profile.html',context={'username':'huangyong'})

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 ... %}<p>{{ ... }}</p>{% endfor %}

**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、靜態文件路徑配置

  • 首先確保 django.contrib.staticfiles 已經添加到settings.INSTALLED_APPS中。
  • 確保在settings.py中設置了STATIC_URL。
  • 在已經安裝了的 app 下創建一個文件夾叫做 static,然后再在這個 static 文件夾下創建一個當前app的名字的文件夾,再把靜態文件放到這個文件夾下(如果直接把靜態文件放在 static 文件夾下,在多個 app 之間有同名的靜態文件時可能就會產生混淆)。
  • 如果有一些靜態文件是不和任何app掛鉤的。那么可以在 settings.py 中添加 STATICFILES_DIRS,以后 DTL 就會在這個列表的路徑中查找靜態文件。 STATICFILES_DIRS = [# 項目根目錄下的 static 文件夾os.path.join(BASE_DIR,"static")]
  • 在模版中使用 load 標簽加載 static 標簽,就可以直接使用 static 文件夾下的靜態文件。 {% load static %}<link rel="stylesheet" href="{% static 'style.css' %}">
  • 如果不想每次在模版中加載靜態文件都使用 load 加載 static 標簽,那么可以在 settings.py 中的 TEMPLATES.OPTIONS中 添加'builtins':['django.templatetags.static'],這樣以后在模版中就可以直接使用 static 標簽,而不用手動 load。
  • 如果沒有在 settings.INSTALLED_APPS 中添加 django.contrib.staticfiles。那么我們就需要手動的將請求靜態文件的 url 與靜態文件的路徑進行映射了。from django.conf import settings from django.conf.urls.static import staticurlpatterns = [# 其他的url映射 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

  • GOOD LUCK!


    總結

    以上是生活随笔為你收集整理的Django 笔记4 -- 模板的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。