Voce della lista di riferimento per indice all'interno del modello Django?


107

Può essere semplice, ma mi sono guardato intorno e non sono riuscito a trovare una risposta. Qual è il modo migliore per fare riferimento a un singolo elemento in un elenco da un modello Django?

In altre parole, come faccio a fare l'equivalente {{ data[0] }}all'interno del linguaggio del modello?

Grazie.

Risposte:



76

Un modo migliore: filtro modello personalizzato: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

come ottenere my_list [x] nei modelli:

nel modello

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

se my_list = [['a','b','c'], ['d','e','f']], puoi usare {{ my_list|index:x|index:y }}nel modello per otteneremy_list[x][y]

Funziona bene con "per"

{{ my_list|index:forloop.counter0 }}

Testato e funziona bene ^ _ ^


1
Una delle spiegazioni più semplici per imparare l'applicazione dei tag dei modelli!
vanguard69

5
È stato fantastico! Ma con il formato {{List | index: x}}, come faccio ad accedere ai valori in cui normalmente utilizzerei un punto? {{(List | index: x) .name}} ovviamente non funziona. Grazie!
JTFouquier

Esattamente quello che stavo cercando. Grazie!
Grant Bartel

Ho un array in cui non sono sicuro dell'indice del valore desiderato{% 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

Sto iterando attraverso un elenco (corrispondenze), mentre iterando ho un altro elenco in cui voglio usare l'indice (counter0), ho provato {{matchTeamEmblems.forloop.counter0.homeTeamID}} ma non funziona, il matchTeamEmblems è un elenco Genero in simple_tag che crea un URL (statico ..) per i miei emblemi ma non riesco ad accedervi
kaya

24

{{ data.0 }} dovrebbe funzionare.

Diciamo che hai scritto data.objdjango try data.obje data.obj(). Se non funzionano, ci prova data["obj"]. Nel tuo caso data[0]può essere scritto come {{ data.0 }}. Ma ti consiglio di inserire data[0]la vista e inviarla come variabile separata.


1

@ jennifer06262016, puoi sicuramente aggiungere un altro filtro per restituire gli oggetti all'interno di un Queryset django.

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

In tal caso, digiteresti qualcosa come questo {{Queryset | index: x | get_item}} nel tuo modello per accedere a qualche oggetto dizionario. Per me funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.