Comment accéder aux éléments de tableau dans un modèle Django?


167

Je reçois un tableau arrtransmis à mon modèle Django. Je veux accéder aux éléments individuels du tableau dans le tableau (par exemple arr[0], arr[1]) etc. au lieu de boucler sur tout le tableau.

Existe-t-il un moyen de le faire dans un modèle Django?


4
Vous pouvez accéder à un élément comme celui arr.0-ci arr.1,, ... Une autre solution: écrivez votre propre tag de modèle arr|array_item: "0" ou quelque chose comme ça.
— rphonika

1
@rphonika Oui, exemple ici: stackoverflow.com/a/29664945/2714931
— WeizhongTu

Réponses:


304

N'oubliez pas que la notation par points dans un modèle Django est utilisée pour quatre notations différentes en Python. Dans un modèle, cela foo.barpeut signifier l'un des éléments suivants:

foo[bar]       # dictionary lookup
foo.bar        # attribute lookup
foo.bar()      # method call
foo[bar]       # list-index lookup

Il les essaie dans cet ordre jusqu'à ce qu'il trouve une correspondance. Donc foo.3, vous obtiendrez votre index de liste car votre objet n'est pas un dict avec 3 comme clé, n'a pas d'attribut nommé 3 et n'a pas de méthode nommée 3.


3
Les premier et dernier ne ressemblent-ils pas davantage foo['bar']?
— Bob Stein

2
Il ne semble y avoir aucun moyen d'accéder à un élément de liste en utilisant un index variable :(
— Vicky Chijwani

D'accord avec @VickyChijwani: la quatrième option ci-dessus n'est pas valide. Les modèles Django ne semblent pas faire de recherches d'index de liste avec des variables
— ehacinom

@hiyume Comment surmonter cela?
— Csaba Toth

Je ne comprends pas que je n'ai pas pu trouver cela dans la documentation officielle. Pourriez-vous fournir une source pour ce message? Je suis également étonné de voir que cette réponse n'est pas acceptée actuellement.
— Kaszanas

149
arr.0
arr.1

etc.


11
comment imprimer dynamique comme ex: arr.variablename
— Nandha Kumar

Y a-t-il un moyen de faire cela sans nombres magiques? En d'autres termes pour "nommer" le .0 .1 .2 etc ...? Tels que array ["first name"], array ["last name"] etc.
— cyberjoac

@cyberjoac dans ce cas, utilisez un dict. Dans la vue: d = {'first_name': 'foo', 'last_name': 'bar'}. Dans le modèle, {{d.first_name}} fonctionnera très bien.
— Ofri Raviv


7

lorsque vous renderdemandez coctextdes informations: par exemple:

return render(request, 'path to template',{'username' :username , 'email'.email})

vous pouvez y accéder sur un modèle comme celui-ci: for variabels :

{% if username %}{{ username }}{% endif %}

for array :

{% if username %}{{ username.1 }}{% endif %}
{% if username %}{{ username.2 }}{% endif %}

vous pouvez également nommer des objets de tableau dans views.pyet dix les utiliser comme:

{% if username %}{{ username.first }}{% endif %}

s'il y a un autre problème, je souhaite vous aider

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.