我寫的部落格程式,為了實現一些特殊的功能,需要自己寫個過濾器。現在把方法記錄下來。
過濾器的功能大概如下,在資料庫裡取出儲存的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_imagetags(value):
- print value
- return value
-
- register.filter('cut_imagetags', cut_imagetags)
自己編寫過濾器很簡單,只需要兩個步驟:1、定義一個函數,接收至少一個參數,如function(value,arg)2、使用register.fileter('過濾器名字',函數名) 註冊過濾器
接下來就是使用了。在html檔案中:{% load filters %} //fileters 是過濾器的那個檔案名稱{% autoescape off %} {{ post.myContent|cut_imagetags}} {% endautoescape %}
先看個沒用過濾器之前的例子,載入頁面時,伺服器端:
[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
看到瀏覽器向伺服器請求了三張圖片。 使用了過濾器之後,就沒有再請求圖片資源了。 自訂過濾器的方法就是如此,就看大家自己要應用在哪些情境上了。
本文出自 “YEELONⒼ ” 部落格,請務必保留此出處http://yeelone.blog.51cto.com/1476571/940949