Referenzlistenelement nach Index in der Django-Vorlage?


105

Das mag einfach sein, aber ich sah mich um und konnte keine Antwort finden. Wie kann ein einzelnes Element in einer Liste aus einer Django-Vorlage am besten referenziert werden?

Mit anderen Worten, wie mache ich das Äquivalent {{ data[0] }}innerhalb der Vorlagensprache?

Vielen Dank.

Antworten:


181

Es sieht aus wie {{ data.0 }}. Siehe Variablen und Lookups .


47
Das nervige ist, dass ich nicht sagen kann {{ data.foo }}, wo foosich eine Variable mit einem Indexwert und nicht einem Eigenschaftsnamen befindet.
Mike DeSimone

1
Wenn Sie bereit sind, ein benutzerdefiniertes Tag zu erstellen, können Sie noch viel mehr tun. Hier arbeiten wir nur mit den eingebauten Sachen.
Mike DeSimone

Link funktioniert nicht mehr, versuchen Sie diesen: docs.djangoproject.com/de/1.10/ref/templates/api/…
Speccy

75

Ein besserer Weg: Benutzerdefinierter Vorlagenfilter: https://docs.djangoproject.com/de/dev/howto/custom-template-tags/

wie get my_list [x] in Vorlagen:

in Vorlage

{% 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]

Wenn my_list = [['a','b','c'], ['d','e','f']], können Sie {{ my_list|index:x|index:y }}in Vorlage verwenden, um zu erhaltenmy_list[x][y]

Es funktioniert gut mit "für"

{{ my_list|index:forloop.counter0 }}

Getestet und funktioniert gut ^ _ ^


1
Eine der einfachsten Erklärungen zum Erlernen der Anwendung von Template Tags!
vanguard69

5
Das war großartig! Wie kann ich mit dem Format {{List | index: x}} auf Werte zugreifen, bei denen ich normalerweise einen Punkt verwenden würde? {{(Liste | Index: x) .name}} funktioniert offensichtlich nicht. Danke dir!
JTFouquier

Genau das, wonach ich gesucht habe. Danke dir!
Grant Bartel

Ich habe ein Array, in dem ich nicht sicher bin, welchen Index mein gewünschter Wert hat{% 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

Ich iteriere durch eine Liste (Übereinstimmungen), während ich iteriere, habe ich eine andere Liste, in der ich den Index (counter0) verwenden möchte. Ich habe versucht, {{matchTeamEmblems.forloop.counter0.homeTeamID}}, aber es funktioniert nicht, die matchTeamEmblems sind eine Liste Ich generiere in simple_tag, das eine URL (statisch ..) für meine Embleme erstellt, aber ich kann nicht darauf zugreifen
kaya

24

{{ data.0 }} sollte arbeiten.

data.objAngenommen , Sie haben Django-Versuche geschrieben data.objund data.obj(). Wenn sie nicht funktionieren, versucht es data["obj"]. In Ihrem Fall data[0]kann geschrieben werden als {{ data.0 }}. Ich empfehle Ihnen jedoch, data[0]die Ansicht aufzurufen und als separate Variable zu senden.


1

@ jennifer06262016, Sie können definitiv einen weiteren Filter hinzufügen, um die Objekte in einem Django-Queryset zurückzugeben.

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

In diesem Fall würden Sie so etwas wie {{Queryset | index: x | get_item}} in Ihre Vorlage eingeben, um auf ein Wörterbuchobjekt zuzugreifen. Für mich geht das.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.