2016-08-22 11 views
0

私はdjangoにHTMLテンプレートを持っています。カテゴリのリスト(queryset、それはdjangoのモデルの.objects.all()関数によって返されます)と競技者の辞書という2つの変数があります。辞書のキーとして、カテゴリのIDを使用しています。値はコンテストのリストです。 カテゴリの名前を入力してからすべての参加者を印刷したいと思います。今私はこのている:私はそれを実行したときにDjango - テンプレート内のインデックスを変数にアクセスするカスタムタグを作成します。

{% for category in categories_list %} 
    <h1>category.category_name</h1> 
    {% for contestant in contestants_dict[category.id] %} 
     {{ contestant }} </br> 
    {% endfor %} 
{% endfor %} 

しかし、私はエラーを取得する:私がこれまで知っている何

TemplateSyntaxError at /olympiada/contestants/ 
Could not parse the remainder: '[category.id]' from 'contestants_dict[category.id]' 

は、私は、テンプレートにインデックスを使用できないことです。 {% something %}には純粋なPythonが含まれていると思っていましたが、それは単なるタグです。私は自分のシンプルなタグを作成する必要があることを知っていますが、私はどのように分かりません。私は文書Writing custom template tagsを読んでいますが、そのような小さな情報があり、私はdict、keyをとり、値を返すタグをどのように作成する(そして主にforループで使うのか)ことができませんでした。 templatetags/custom_tags.py:

from django import template 


register = template.Library() 


@register.simple_tag 
def list_index(a, b): 
    return a[b] 

とテンプレートで:私が試したことはある

{% for contestant in list_index contestants_dict category.id %} 

しかし、私はTemplateSyntaxErrorを取得します。 タグを作成する方法を説明してくださいか、これを行うより良い方法がありますか?おかげさまで

// EDIT:それが動作

{% list_index contestants_list category.id as cont %} 
    {% for contestant in cont %} 

が、それは2本のラインを取り、私は別の変数を作成する必要があります。 私は、このようにそれを行うことができました。それなしでそれをする方法はありますか?

+0

のような使い方ではなく、タグのフィルタを使用してくださいと思いますフィルタを使用することができるはずということのような2行をしたくない場合。 –

答えて

0

あなたは、私が

@register.filter 
def list_index(a, b): 
    return a[b] 

次に、この

{% for contestant in contestants_dict|list_index:category.id %} 
    {{ contestant }} </br> 
{% endfor %} 
関連する問題