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.