djangoカスタムフィルタ


私が書いたブログプログラムは、いくつかの特殊な機能を実現するために、自分でフィルタを書く必要があります.今方法を記録します.
フィルタの機能は、格納されているhtmlコード(各種リッチテキストエディタで保存されているコード)をデータベースから取り出すようにします.それから展示を取り出して、文章のリストに似ています.最初はこのように取り出します.
{% autoescape off %} {{  post.myContent}}  {% endautoescape %}
しかし、この時点でピクチャリソース(imgラベルがある)のロードが開始され、ピクチャが多すぎたり、大きすぎたりすると、ページのロードが遅くなります.ユーザー体験が悪い.
なぜjqueryのlazyloadプラグインを使わないのかと聞かれるかもしれませんが、それは偽の遅延ロードであり、サーバの圧力を軽減するのに役立たないと思います.
だから今フィルタを書く必要があります.ピクチャをロードする必要がないときは、まずサーバがピクチャをロードしないようにします.
本文は次のとおりです.
「appディレクトリ」で、新しいディレクトリを作成します.
templatetags(名前を間違えないでください
 
├── filters.py(勝手にファイルを作って、名前を勝手につけます
├── filters.pyc
├── __init__.py(これは自分で作成した空のファイルで、名前が合えばいいです.
└── __init__.pyc
内容を見てみましょう.
 

  
  
  
  
  1. #!/usr/bin/env python   
  2. #coding:utf-8  
  3.  
  4. from django import template 
  5. register = template.Library() 
  6.  
  7. def cut_imagetags(value): 
  8.     print value 
  9.     return value 
  10.  
  11. register.filter('cut_imagetags', cut_imagetags) 

フィルタを自分で作成するには、2つのステップしか必要ありません.
1、関数を定義し、function(value,arg)のような少なくとも1つのパラメータを受信する
2.registerを使用する.フィルタ('フィルタ名',関数名)登録フィルタ
次は使います.
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
ブラウザがサーバに3枚の画像を要求したのを見た.
 
フィルタを使用すると、画像リソースは要求されません.
 
フィルタをカスタマイズする方法は、自分がどのシーンに適用するかによって決まります.