我寫的部落格程式,為了實現一些特殊的功能,需要自己寫個過濾器。現在把方法記錄下來。
過濾器的功能大概如下,在資料庫裡取出儲存的html程式碼(各種富文字編輯器儲存的程式碼)。然後取出來展示,做類似於文章列表。在一開始,我們會這樣取出來:
{% autoescape off %} {{ post.myContent}} {% endautoescape %}
但是這個時候就會開始載入圖片資源(有img標籤),如果圖片太多,太大,就會使頁面載入得太慢。使用者體驗很差。
也許你會問,為什麼不用jquery的lazyload外掛,我覺得那是偽的延遲載入,根本無助於減輕伺服器的壓力。
所以現在需要寫個過濾器,在無須載入圖片的時候,先使得伺服器不用載入圖片。
正文如下:
在app目錄下,新建一個目錄:
templatetags (名字不要搞錯
├── filters.py (隨便建一個檔案,名字隨便起
├── filters.pyc
├── __init__.py (這個是自己建立的空檔案,只要名字對就行
└── __init__.pyc
- #!/usr/bin/env python
- #coding:utf-8
- from django import template
- register = template.Library()
- def cut_p_w_picpathtags(value):
- print value
- return value
- register.filter(`cut_p_w_picpathtags`, cut_p_w_picpathtags)
先看個沒用過濾器之前的例子,載入頁面時,伺服器端:
[24/Jul/2012 02:35:46] “GET /media/1343066025.950.280283821055DeepinScrot-0444.png HTTP/1.1” 200 43561
[24/Jul/2012 02:35:46] “GET /media/1343066026.890.981396435618DeepinScrot-1556.png HTTP/1.1” 200 57454
[24/Jul/2012 02:35:46] “GET /media/1343066026.030.717419530083DeepinScrot-1029.png HTTP/1.1” 200 339557