Django从理论到实战(part20)--DLT常用过滤器
學習筆記,僅供參考
參考自:Django打造大型企業官網–Huang Y;
本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的記錄一下。
文章目錄
- DLT常用過濾器
- 過濾器簡介
- 準備工作
- 過濾器add
- 過濾器cut
- 過濾器date
- 過濾器default
- 過濾器default_if_none
- 過濾器first
- 過濾器last
- 過濾器join
- 過濾器length
- 過濾器lower
- 過濾器upper
- 過濾器random
- 過濾器slice
- 過濾器stringtags
- 過濾器truncatechars
- 過濾器truncatechars_html
DLT常用過濾器
過濾器簡介
在模版中,有時候需要對一些數據進行處理以后才能使用。在Python中我們通過函數的形式來完成,而在模版中,則是通過過濾器來實現,過濾器中是通過|來處理數據的。
準備工作
我們首先新建一個項目newwebsite2,專門學習這個知識點:
django-admin startproject newwebsite2進入項目文件夾:
cd newwebsite2開啟服務:
python manage.py runserver在項目下創建模板文件夾templates,并在settings.py中設置模板文件夾的路徑:
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',],},}, ]過濾器add
該過濾器會將傳進來的參數添加到value上,例如:
{{ value|add:"2" }}上面的代碼中,如果value是等于4,那么結果將是6,如果value是等于一個普通的字符串,比如abc,那么結果將是abc2,add過濾器的源代碼如下:
def add(value, arg):try:return int(value) + int(arg)except (ValueError, TypeError):try:return value + argexcept Exception:return ''- 舉個例子
現在,我們創建一個模板文件add_file.py:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>小黃之家</title> </head> <body><p>{{ value1|add:value2 }}</p></body> </html>在主urls.py文件中添加路由:
from django.contrib import admin from django.urls import path from . import viewsurlpatterns = [path('admin/', admin.site.urls),path('add/', views.add_list), ]創建視圖函數:
from django.http import HttpResponse from django.shortcuts import renderdef add_list(request):context = {"value1":[1, 2, 3], "value2":[4, 5, 6]}return render(request, "add_file.html",context = context)向http://127.0.0.1:8000/add/發起訪問:
過濾器cut
該過濾器會移除value中所有指定的字符串,類似于python中的replace(args,""),例如:
{{ value|cut:" " }}上述的代碼將會移除value中所有的空格字符。
cut過濾器的源代碼如下:
def cut(value, arg):"""Remove all values of arg from the given string."""safe = isinstance(value, SafeData)value = value.replace(arg, '')if safe and arg != ';':return mark_safe(value)return value- 舉個例子
現在,我們創建一個模板文件cut_file.py:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>小黃之家</title> </head> <body><p>{{ "Hello World !"|cut:" " }}</p></body> </html>在主urls.py文件中添加路由:
urlpatterns = [path('admin/', admin.site.urls),path('add/', views.add_list),path('cut/', views.cut_list),path('my_test/', views.my_test), ]創建視圖函數:
def cut_list(request):return render(request, "cut_file.html")向http://127.0.0.1:8000/cut/發起訪問:
過濾器date
該過濾器將一個日期按照指定的格式,格式化成字符串,例如:
#視圖模塊中 context = {"birthday": datetime.now() }#模版文件中 {{ birthday|date:"Y/m/d" }}上述的代碼將會輸出2020/07/04。其中Y代表的是四位數字的年份,m代表的是兩位數字的月份,d代表的是兩位數字的日。
更多時間格式化的方式,見下表:
| Y | 四位數字的年份 | 2018 |
| m | 兩位數字的月份 | 01-12 |
| n | 月份,1-9前面沒有0前綴 | 1-12 |
| d | 兩位數字的天 | 01-31 |
| j | 天,但是1-9前面沒有0前綴 | 1-31 |
| g | 小時,12小時格式的,1-9前面沒有0前綴 | 1-12 |
| h | 小時,12小時格式的,1-9前面有0前綴 | 01-12 |
| G | 小時,24小時格式的,1-9前面沒有0前綴 | 1-23 |
| H | 小時,24小時格式的,1-9前面有0前綴 | 01-23 |
| i | 分鐘,1-9前面有0前綴 | 00-59 |
| s | 秒,1-9前面有0前綴 | 00-59 |
過濾器default
如果value被評估為False,就使用default過濾器提供的默認值,例如:
{{ value|default:"nothing" }}如果value是等于一個空的字符串。比如"",那么以上代碼將會輸出nothing。
備注:[],"",None,{}等這些在if判斷中為False的value,在default過濾器中會被評估為False
過濾器default_if_none
如果value是None,就使用default_if_none提供的默認值,例如:
{{ value|default_if_none:"nothing" }}如果value等于"",即空字符串,以上代碼會輸出空字符串,只有當value為None時,以上代碼才會輸出nothing。
過濾器first
該過濾器將返回列表/元組/字符串中的第一個元素,例如:
{{ value|first }}上述代碼中,如果value為['a','b','c'],那么將返回a。
過濾器last
該過濾器將返回列表/元組/字符串中的最后一個元素,示例代碼如下:
{{ value|last }}如果value是等于['a','b','c'],那么將返回c。
過濾器join
該過濾器類似于Python中的join函數,將列表/元組/字符串用指定的字符進行拼接,例如:
{{ value|join:"-" }}如果value是等于['a','b','c'],那么將返回a-b-c。
過濾器length
該過濾器將獲取列表/元組/字符串/字典的長度,例如:
{{ value|length }}如果value是等于['a','b','c'],那么將返回3;如果value為None,那么將返回0。
過濾器lower
該過濾器將value中所有的字符全部轉換成小寫,例如:
{{ value|lower }}如果value等于Hello World,那么將輸出hello world。
過濾器upper
該過濾器類似于lower,只不過是將指定的字符串全部轉換成大寫。
過濾器random
該過濾器可以在列表/字符串/元組中隨機的選擇一個值,例如:
{{ value|random }}如果valued等于['a','b','c'],那么Django將會在a, b, c中隨機選擇一個返回。
過濾器slice
該過濾器類似于Python中的切片操作,例如:
{{ some_list|slice:"2:" }}以上代碼將會將some_list從2開始做切片操作。
過濾器stringtags
該過濾器會刪除字符串中所有的html標簽,例如:
{{ value|striptags }}如果value是<strong>hello world</strong>,那么將會輸出hello world。
過濾器truncatechars
如果字符串value的長度超過了該過濾器指定的長度,那么就會進行切割,并且會拼接三個點來作為省略號,例如:
{{ value|truncatechars:5 }}如果value等于北京歡迎您~,那么輸出的結果是北京...
這就奇怪了,為什么輸出結果不是北京歡迎您…呢?
這是因為,三個點也占了三個字符,北京+ ... 的字符長度為5,所以是北京...
當字符串vlaue的長度沒有超過該過濾器指定的長度,那么將不進行切割,例如:
{{ "馬鞍山"|truncatechars:5 }}上述代碼的輸出結果依然是馬鞍山
過濾器truncatechars_html
該過濾器類似于truncatechars,只不過不會切割html標簽,例如:
{{ value|truncatechars:5 }}如果value是等于<p>北京歡迎您~</p>,那么輸出的是<p>北京...</p>。
總結
以上是生活随笔為你收集整理的Django从理论到实战(part20)--DLT常用过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在Flash cs3中将位图转换为矢
- 下一篇: Django从理论到实战(part21)