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