6

変数をdjangoテンプレートのインデックスとして使用するにはどうすればよいですか?

今、私はこのエラーを受け取ります:

Exception Type:
TemplateSyntaxError

Exception Value:    
Could not parse the remainder: '[year]' from 'bikesProfit.[year]'

私も試し{{ bikesProfit.year }}ましたが、これは空の結果をもたらします。

 {%  for year in years_list %}

        <tr>
            <th>Total profit {{ year }}:</th>
        </tr>
        <tr>
            <th></th>
            <th> {{ bikesProfit[year] }} </th>

...
4

3 に答える 3

19

これは非常に一般的な質問です。SOには多くの回答があります。

カスタムテンプレートフィルターを作成できます:

@register.filter
def return_item(l, i):
    try:
        return l[i]
    except:
        return None

使用法:

{{ bikesProfit|return_item:year }}
于 2012-11-14T10:12:45.870 に答える
3

これが直接可能だとは思いません(編集: goliney's answerに示されているように、フィルタを使用して手動で実装できます)。ドキュメントには次のように記載されています。

Django はテンプレート言語で使用できるロジック処理の量を意図的に制限しているため、テンプレート内からアクセスされるメソッド呼び出しに引数を渡すことはできません。ビューでデータを計算し、テンプレートに渡して表示する必要があります。

あなたのケースがあなたが示しているものより複雑でない場合、私の意見では、bikeProfit代わりにループすることが最善の解決策です。

{% for year, profit in bikeProfit.items %}
    ...
    <th>Total profit {{ year }}:</th>
    ...
    <th> {{ profit }} </th>
    ...
于 2012-11-14T10:13:25.373 に答える
2

可能ですが、Djangoモデルの粒度に反します...

関心のあるアイテムがある場合、理想的には、ビューはそれらのアイテムのみを含むオブジェクトを返す必要があります(OTTOMHのようなもの):

Something.objects.filter(something__typename='Bike', year__range=(1998, 2001)) 
于 2012-11-14T10:25:54.767 に答える