web-dev-qa-db-fra.com

Référence élément par liste dans Django template?

Cela peut sembler simple, mais j’ai regardé autour de moi sans trouver de réponse. Quelle est la meilleure façon de référencer un seul élément dans une liste à partir d'un modèle Django?

En d'autres termes, comment puis-je faire l'équivalent de {{ data[0] }} dans la langue du template?

Merci.

87
user456584

Ça ressemble à {{ data.0 }}. Voir Variables et recherches .

152
Mike DeSimone

Une meilleure façon: filtre de modèle personnalisé: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

comme get List [x] dans les templates:

dans le modèle

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

templatetags/index.py

from Django import template
register = template.Library()

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

si List = [['a','b','c'], ['d','e','f']], vous pouvez utiliser {{ List|index:x|index:y }} dans le modèle pour obtenir List[x][y]

Cela fonctionne bien avec "pour"

{{ List|index:forloop.counter0 }}

Testé et fonctionne bien ^ _ ^

62
WeizhongTu

{{ data.0 }} Devrait fonctionner.

Supposons que vous écriviez data.obj Django essaye data.obj Et data.obj(). _. Si cela ne fonctionne pas, essayez data["obj"] . Dans votre cas, data[0] Peut être écrit sous la forme {{ data.0 }}. Mais je vous recommande d'extraire data[0] Dans la vue et de l'envoyer en tant que variable distincte.

21
yilmazhuseyin

@ jennifer06262016, vous pouvez certainement ajouter un autre filtre pour renvoyer les objets à l'intérieur d'un Django Queryset.

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

Dans ce cas, vous devez taper quelque chose comme ceci {{Queryset | index: x | get_item}} dans votre modèle pour accéder à un objet dictionnaire. Ça marche pour moi.

1
Kendrick Fong