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?

Miket
la source
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.

Ned Batchelder
la source
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.

Ofri Raviv
la source
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

Omid reza
la source