Danjgoの研究ノート(5)----共通テンプレートフィルタと自家製フィルタ

danjgoテンプレートフィルタとカスタムフィルタ

#Djangoテンプレートは、ノートをフィルタリングします。

##は、フィルタを必要とするのはなぜ?
DTLは`()の関数呼び出しを`サポートされておらず、したがって、重大な制限を有することになる関数にパラメータを渡すことができないからです。フィルタは、実際にパラメータが対処する必要があり、また、(すなわち、多くとも2つのパラメータのみである)一つの追加パラメータを受け取ることができる処理することができる機能です。

##フィルタを追加
値に渡されたパラメータは、元の上部に加えました。このフィルタは、 ``パラメータ値`に試み、その後、プラスチックが添加さに変換されます。変換プロセスは、成形し、その後、 `` `パラメータ値をスプライシング意志に失敗した場合。文字列の場合、文字列は、それがリストであれば、それはリストにスプライスされます、中にスプライシングされます。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|追加: "2"}}
`` `

`[値]が4に等しい場合、結果は6になります。`[値]は、通常の文字列、例えばas` abc`に等しい場合、結果は` abc2`あろう。次のように `Add`フィルタのソースコードは次のとおりです。

`` `pythonの
デフ(値、引数)を追加します。
"" "の値に引数を追加します。" ""
試してみてください。
リターンはint(値)+ int型(引数)
(とValueError、TypeError例外)を除い:
試してみてください。
戻り値+引数
例外を除い:
リターン''
`` `

 

##カットフィルター
すべての指定した文字列値を削除します。``と同様に(引数"") `でpython`を交換してください。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|カット:」 "}}
` ``

`たとえば上記の[値]は、すべての空白文字を削除します。次のように `Cut`フィルタのソースコードは次のとおりです。

`` `Pythonは
DEF(値、引数)を切断:
「」「与えられた文字列から引数の全ての値を削除」「」
安全=でisinstance(値、SafeData)
値= value.replace(引数を、「」)
安全場合引数= ';':!
戻りmark_safe(値)
の戻り値は
`` `

## `date`フィルタ指定された形式で1日、文字列にフォーマット。次のようにサンプル・コードは次のとおりです。

Pythonの``
データ
コンテキスト= {
"誕生日":DateTime.Now()
}

#模版
{{誕生日|日付: "Y / M / D"}}
`` `

その後、出力は2018/02 / 01 `になります。`4桁の年を表しY`は、 'M'は2桁の月を表し、` D 'は2桁の日を表します。
フォーマットされた多くの時間があります。下の表。

|文字形式説明|模範的な|
| --- | --- | --- |
| Y | 4桁の年| 2018年|
| M | 2桁の月| 01-12 |
| N- |月、 1-12 | | 1-9 0の前の接頭辞ではない
| D | 2桁の日| 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 | 1-9の前に0接頭辞時間、24時間形式、| 01-23 |
00-59 | | | I |の前に分1-9 0プレフィックス
| S |秒、接頭辞の前に1-9 0 | 00-59 |



##デフォルト

値はは `false`として評価されている場合。例えば ​​`[]` `」「` `NONE`、` {} ``フィルタによって提供されるデフォルト値を使用する `if`決意[値] default`を同様にfalse`の他のかかります。次のようにサンプル・コードは次のとおりです。

`` `pythonの
{{値|デフォルト: "何も"}}
` ``

`場合は[値]は、空の文字列に等しいです。例えば、 `」「`その後、上記のコードが出力 `nothing`。

###デフォルトの\ _ifの\の_none

値が `NONE`は、それがdefault_if_none`提供default`を使用します。そして、defaultをすべてのように評価され、この区別、defaultを `false`のは、デフォルト値を使用します。`default_if_none`のみ、この値はデフォルト値を使用しますNONE`時間to`等しいです。次のようにサンプル・コードは次のとおりです。

`` `pythonの
{{値| default_if_none: "何も"}}
` ``

`[値]は、「」に等しい場合には、空の文字列です`、出力は空の文字列以上になります。`[値]がA` NONE`値であれば、上記のコードは出力` nothing`します。

 

### 最初

リスト/タプル/文字列の最初の要素を返します。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|最初}}
`` `

`[値]が等しいto` [ 'A'、 'B'、 'C​​'] 'である場合、出力はA`をbe`う。

 

###最後

リスト/タプル/文字列の最後の要素を返します。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|最後}}
`` `

`[値]が等しいto` [ 'A'、 'B'、 'C​​'] 'である場合、出力はC'をbe`う。

 

### floatformat

浮動小数点型のフォーマットに丸め方法を使用してください。フィルタは、任意のパラメータを渡していない場合。次に小数小数点以下だけ、小数の後ろのみリザーブ整数は、次に、全て0である場合。もちろん、具体的な準備いくつかの小数点以下を識別するためのパラメータを渡します。

1.引数が渡されない場合:

|値|ステンシルコード|出力|
| --- | --- | --- |
| 34.23234 | `{{値\ |}} floatformat` | 34.2 |
| 34.000 |` {{値\ |}} `floatformat | 34は|
| 34.260 | `{{値\ |}} floatformat` | 34.3 |

2.引数の場合:

|値|ステンシルコード|出力|
| --- | --- | --- |
| 34.23234 | `{{値\ | floatformat:` 3} | 34.232 |
| 34.0000 | `{{値\ | floatformat。 }} `3 | 34.000 |。
| 34.26000 |` {{値\ | floatformat: `3} | 34.260 |

 

###参加

`Python`` join`、リスト/タプルと同様に/文字の指定した文字列にスプライシングされました。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|参加: "/"}}
`` `

`[値]が等しいto` [ 'A'、 'B'、 'C​​']`、上記code` A / B / C 'の次に、出力された場合。

 

###の長さ

リスト/タプル/文字列/長さディクショナリを取得します。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|長さ}}
`` `

`[値]が[ 'A'、 'B'、 'C​​'] '、「3'の上、出力コード等しいto`ある場合。[値] is` NONE`、その後、上記の '0'を返しますならば。

 

###下

すべての文字の値をすべて小文字に変換されます。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|低いです}}
`` `

場合は[値]こんにちはWorld` to`等しいです。次いで、上記のコードは `ハローworld`を出力します。

 

上位###

`lower`と同様に、ちょうどすべての指定した文字列を大文字に変換。

 

###ランダム

ランダムなリスト/文字列ビーイング/値のタプルを選択します。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|ランダム}}
`` `

`[値]が等しいto` [「A」、「B」、「C」] 'である場合、ランダムリスト内の1つまたは複数のコードを選択します。

 

### 安全

マーク・文字列が安全です。それは自動的にオフに文字列をエスケープします。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値|安全}}
`` `

[値]は、この `<A> as`特殊文字を含まない文字列である場合は、上記のコードは、通常の入力文字列になります。[値]は、html`コードof`文字列の場合、上記のコードは、この `html`コードがブラウザにレンダリングされて置きます。

 

### スライス

操作Python`で同様 `セクション。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{some_list |スライス: "2"}}
`` `

上記のコードは '2' to`のsome_list`から操作をスライスし始めます。

 

### stringtags

すべての `html`のラベル文字列を削除します。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値| striptags}}
`` `

もし[値] is`の<strong>のHello World </ strong>の `、上記のコードは、その後world`ハローoutput`ます。

### truncatechars

与えられた文字列は、フィルタで指定された長さよりも長い場合。それは切断され、3点が省略記号として使用されるスプライスされます。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値| truncatechars:5}}
`` `

[値]は、北京 `is`〜` `北京へようこそ、その後、結果の出力に等しい`場合.... ``北京はあなたを歓迎しない理由あなたは...、それを考えることができます。3点はまた、3つの文字を占めているため、その `` 3点の北京+文字の長さは5です。

 

### truncatechars \ _html

`truncatechars`と同様に、単にラベルをhtml` cut`ません。次のようにサンプル・コードは次のとおりです。

`` Pythonの
{{値| truncatechars:5}}
`` `

[値]は、 `北京〜</ P>と<P>ようこそ等しいto`であれば、出力は<P>北京... </ P>` be`ます。

 

 

#のカスタムフィルタ注
アプリで1.まず、パッケージの名前を書き留め、 `templatetags`と呼ばれるPythonパッケージを作成するには、そうでない場合は、彼らが見つけることができない、templatetags`をbe`必要があります。
フィルタのpythonを格納するためのファイルを作成し、以下のtemplatetags`、このパッケージ`2.。
新しいファイル3.パイソン、フィルタ(すなわち、機能)を定義し、この関数の最初のパラメータは常にフィルタリングされた値であり、フィルタを使用したときのパラメータが渡された場合は、それはまた別のものを定義することができパラメータ。しかし、フィルタは、2つのパラメータのみの最大を持つことができます。
4.フィルタ(機能)を書いた後、 `django.template.Library.filter`レジスタを使用します。
5.また、このアプリでは、 `settings.INSTALLED_APS`にこのフィルタが配置されている追加したい、またはDjangoはこのフィルタを見つけることができません。
6. `load`のpythonパッケージラベルロードフィルタは、テンプレートに位置しています。
7.フィルタの使用。
8. `django.template.Library.filter`もデコレータとして使用することができます。`filter`機能は、任意のパラメータを渡していない場合は、フィルタ名として機能するように、この名前を使用します。あなたは、フィルタ名として関数名を使用したくない場合はもちろん、あなたはまた、 `name`のパラメータを渡すことができます。次のようにサンプルコードは:``
`のPython
の@ register.filter( 'my_greet')
DEF挨拶(値、ワード):
戻り値のWord +
`

おすすめ

転載: www.cnblogs.com/xifengqidama/p/11347193.html