Djangoテンプレート内のインデックスでリスト項目を参照しますか?


107

これは簡単なことかもしれませんが、私は周りを見回して、答えを見つけることができませんでした。Djangoテンプレートからリスト内の単一のアイテムを参照する最良の方法は何ですか?

言い換えれば{{ data[0] }}、テンプレート言語内で同等のことをするにはどうすればよいですか?

ありがとう。

回答:


184

のように見えます{{ data.0 }}変数とルックアップを参照してください。


47
迷惑な事は、私が言うことができないということである{{ data.foo }}ところ、fooその中のインデックス値ではなく、プロパティ名を持つ変数です。
Mike DeSimone、2011年

1
カスタムタグを作成したい場合は、さらに多くのことができます。ここでは、組み込みのものを使用しています。
Mike DeSimone、2015

Linkはこれを試してみてください、もはや機能していない:docs.djangoproject.com/en/1.10/ref/templates/api/...
Speccy

76

より良い方法:カスタムテンプレートフィルター: https //docs.djangoproject.com/en/dev/howto/custom-template-tags/

テンプレートのget my_list [x]など:

テンプレート内

{% load index %}
{{ my_list|index:x }}

templatetags / index.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

場合my_list = [['a','b','c'], ['d','e','f']]{{ my_list|index:x|index:y }}テンプレートで使用して取得できますmy_list[x][y]

「for」でうまく機能します

{{ my_list|index:forloop.counter0 }}

テスト済みで正常に動作しています^ _ ^


1
テンプレートタグのアプリケーションを学ぶための最も簡単な説明の一つ!
vanguard69 2015

5
これは素晴らしかったです!しかし、{{List | index:x}}形式で、通常ドットを使用する場所に値にアクセスするにはどうすればよいですか?{{(List | index:x).name}}は明らかに機能しません。ありがとうございました!
JTFouquier 2016年

まさに私が探していたもの。ありがとうございました!
Grant Bartel 2017

希望する値のインデックスがわからない配列があります{% for id in article_details.heading.contents.article_ids %} {% if id.type == 'DOI' %} {{ article_details.heading.contents.article_ids.forloop.counter0.value }} {% endif %} {% endfor %}
Akin Hwan

リスト(一致)を反復処理していますが、インデックス(counter0)を使用する別のリストを反復処理していますが、{{matchTeamEmblems.forloop.counter0.homeTeamID}}を試しましたが、機能しません。matchTeamEmblemsはリストですエンブレムのURL(静的..)を構築するsimple_tagを生成しますが、アクセスできません
kaya

24

{{ data.0 }} うまくいくはずです。

あなたがdata.objジャンゴの試みdata.objとを書いたとしましょうdata.obj()。彼らが働かない場合、それは試みdata["obj"]ます。あなたの場合、data[0]と書くことができます{{ data.0 }}。しかし、私はあなたがdata[0]ビューを引き出して、それを個別の変数として送ることをお勧めします。


1

@ jennifer06262016では、djangoクエリセット内のオブジェクトを返す別のフィルターを確実に追加できます。

@register.filter 
def get_item(Queryset):
    return Queryset.your_item_key

その場合は、次のような{{Queryset | index:x | get_item}}をテンプレートに入力して、辞書オブジェクトにアクセスします。わたしにはできる。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.