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.