1

並べ替えオプションを含む並べ替えられた辞書があります。

sort_options = SortedDict([
    ("importance" , ("Importance" , "warning-sign")),
    ("effort" , ("Effort" , "wrench" , "effort")),
    ("time_estimate" , ("Time Estimate" , "time")),
    ("date_last_completed" , ("Date Last Completed" , "calendar")),
])  

テンプレートに次のオプションを表示しています。

{% for key, icon in sort_options.items %}<!-- Sort Options -->
    <a class="btn btn-info" href={{ request.path }}?key={{ key }}&orientation=desc><i class="icon-{{ icon.1 }} icon-large"></i></a>
{% endfor %}

4つのソートオプションを定義する必要がありますが、最初の3つだけを表示したいと思います(残りのオプションは他の場所で使用されます)。また、表示する必要のない他の並べ替えオプションを追加する予定です。最後のオプションが表示されないように、forloopカウンターを使用してifステートメントを作成することもできますが、これは無駄に思えます。

このフィルターを見つけましたが、キーとアイコンデータの両方を必要とするforloopと組み合わせる方法がわかりません。

ディクショナリ上で実行され、X回だけループするdjangoテンプレートforループを作成するにはどうすればよいですか?

4

2 に答える 2

4

ジョーの答えに似ていますが、実際にはこれを行う組み込みのフィルターsliceがあります。

{% for key, icon in sort_options.items|slice:":3" %}
于 2012-08-17T20:37:43.183 に答える
0

テンプレートフィルターでこれができると思います。たとえば、次のようになります。

./mymodules/templatetags/mytags.py

@register.filter
def get_recent(object, token):
    """
    Must pass a Option Dictionary 
    """
    return object.items()[:token]

そして、テンプレートで:

{% load mytags %}

{% for option in sort_options|get_recent:3 %}
    key: {{ option.0  }} 
    value: {{ option.1 }}
{% endfor %}

上記のコードをテストする機会はありませんでしたが、ロジックは適切だと思います。どう考えているか教えてください。

于 2012-08-17T20:08:39.363 に答える