2016-11-05 115 views
2

カスタムテンプレートフィルタに複数の引数を送信する方法がわかりません。Django - テンプレート内の変数からの文字列

問題は、テンプレート変数を引数として使用することです。

カスタムテンプレートのFILTER

@register.filter 
def is_scheduled(product_id,dayhour): 
    day,hour = dayhour.split(',') 
    return Product.objects.get(id=product_id).is_scheduled(day,hour) 

通常の使用

{% if product.id|is_scheduled:"7,22" %}...{% endif %} 

私は2つの引数を置くように、上記の行が正常に動作します - フィルター( - 作品テスト)に7と22を。問題は、引数としてプレーンテキスト/文字列の代わりに変数を入れたいということです。私のテンプレートで

{% with day=forloop.counter|add:"-2" hour=forloop.parentloop.counter|add:"-2" %} 

は今、私は、引数として{{ day }}{{ hour }}を使用します。

Iは、例えば試み:

{% if product.id|is_scheduled:"{{ day }},{{ hour }}" %}...{% endif %} 

しかし、これは発生します

例外値:INTの無効なリテラルを()ベース10と: '{{日}}'

ご意見はありますか?

答えて

3

{% %}の内部にいるときに{{}}は必要ありません。そのタグで直接名前を使用し、文字列連結テンプレート構文addを使用してください。文字列で、文字列への型変換は、文字列をconcating前に必要とされる場合dayhour

{% with day|stringformat:"s" as sday hour|stringformat:"s" as shour %} 
    {% with sday|add:","|add:shour as arg %} 
     {% if product.id|is_scheduled:arg %}...{% endif %} 
    {% endwith %} 
{% endwith %} 
+0

残念ながら、これは動作しません。なぜ私は分からない。おそらく、昼と時間は整数です。例外値:\t 'int'オブジェクトには属性 'split'がありません。また、dayhour変数を出力すると、たとえば "0,2"ではなく0が出力されます。 –

+0

私は型変換を含むように答えを更新しました –

+0

良いアプローチのようですが、多分構文に問題があります。 u'hour | stringformat: "s" '私はエラーの原因を突き止めようとしています。 –

関連する問題