2012-05-03 8 views
3

のように2以上のフィルタを使用します。Djangoテンプレートフィルタは、私は以下のようなテンプレートに複数のフィルタを使用するパイプ

value: {{ record.status|cut:"build:"|add:"5" }} 

record.statusは、ビルドになります。ここでnは、0 < nは私はそれが唯一の ので、私は値を取得していないプラス5

は、Djangoは一つだけをサポートしています、最初のフィルターに反映、この値私は、コードの上にしようとした基本値5

を追加しますフィルタ? ありがとう

+0

をそして、何それ、出力していますか? – DrTyrsa

+0

record.statusがbuild:53の場合、53は出力されますが58は出力されません – CSJ

+0

ただテストして、うまく動作します(文字列 "build:53")。 – DrTyrsa

答えて

4

最初に、あなたの質問に対する答えは「djangoは1つのフィルタのみをサポートしていますか?それは Djangoがほとんど無制限のをサポートしています連鎖フィルタの数(使用しているプラ​​ットフォームと、その数の連鎖フィルタを書く=もちろん)に依存します。 (証拠はないが、それは理にかなっている)は、例えば、いくつかのコードを取り、それが実際にテンプレート'{{ x|add:1|add:1|...10000 in all...|add:1 }}'

>>> from django.template import * 
>>> t = Template('{{ x|'+'|'.join(['add:1']*10000)+' }}') 
>>> t.render(Context({'x':0})) 
u'10000' 

第二にある、あなたはcutaddの組み込みのバージョンを使用していることを確認するためにテンプレートを確認してください。 cutの後の出力値をチェックして、int w/o raise例外に強制できることを確認してください。
私はちょうどチェックしても、Djangoの0.95は、この用法サポートしていることを発見しました:

def add(value, arg): 
    "Adds the arg to the value" 
    return int(value) + int(arg) 
1

連鎖フィルタがサポートされています。あなたはそれが動作しない理由を把握したい場合は、その後、私は何をしたいことは次のとおりです。

  1. は「DEFを追加」、および「インポートを入れて検索すると、Django /テンプレート/ defaultfilters.pyに
  2. ipdbインストールipdb; ipdb.set_traceは()」関数
  3. の上部に再びブラウザでページを開くと、そのrunserver実行し、端末からのコードの実行を追跡することができるはず、あなたが取得していない理由を把握します期待される結果

簡単な方法はmake your own template filterです。それは

from django.template import Library 

register = Library() 

@register.filter 
def cut_and_add(value, cut, add): 
    value = value.replace(cut, '') 
    value = int(value) + add 
    return value 

あなたはyourapp/templatetags/your_templatetags.pyでこれを保存( - それは空にすることができ、yourapp/templatetags/__init__.pyが存在することを)仮定のようになります。テンプレートとして次のように使用します。

{% load your_templatetags %} 

{{ record.status|cut_and_add:"build:",5 }} 

もちろん、これはテストされていない疑似コードです。しかし少し努力すれば、それを働かせることができます。

+1

そして、私は最初に両方の値を整数に強制しようとします。ああ、私は思っていません、[私は知っている](https://docs.djangoproject。com/en/dev/ref/templates/builtins /#add)を実行します。 – DrTyrsa

+0

実際に試してみます。私は追加フィルタをデバッグする方法についての指示を追加しました。私はこの問題に直面していましたが、それ以来ずっとありましたが、私はそれをどのように解決したのか覚えていません。だから、何らかの理由で期待通りに動作しない可能性があります。ご意見をいただきありがとうございます。 – jpic

関連する問題