0
votes

Modèle Django - Comment obtenir la clé, la valeur (liste) d'un dictionnaire dans le contexte de la requête

J'ai mon contexte dans un modèle html et je ne suis pas capable de lire la valeur qui est une liste d'objets de la clé dans mon dictionnaire.

Voici mon contexte:

{% for month, post in month_posts.items %} 

C'est la boucle for que j'implémente pour obtenir la clé et la valeur:

Could not parse the remainder: '[month]' from 'month_posts[month]'

J'ai eu cette erreur:

{% for month in month_posts %}
   ...
   <h3>{{ month | capfirst }}</h3>
   {% for post in month_posts[month] %}
      <a href="#">{{ post.title }}</a>
   {% endfor %}
   ...
{% endfor %}

J'ai essayé ceux-ci:

{'month_posts': 
   defaultdict(<class 'list'>, 
       {'October': [<Post: Set pagination>, <Post: Test pagination>],
        'November': [<Post: Redesign Model>]}
   )
}

Je n'ai eu aucune erreur mais également aucune donnée dans mon modèle.

Avez-vous une idée de la façon dont je pourrais obtenir la liste dans la valeur du dictionnaire?

Merci.


0 commentaires

3 Réponses :


0
votes

Avez-vous renvoyé le contexte (month_posts) avec la fonction de rendu?


1 commentaires

Oui, je l'ai rendu. context = {'month_posts': month_posts, 'categories': categories} C'est mon contexte. {'month_posts': defaultdict (<class 'list'>, {'November': [<Post: Redesign Model>]}), 'categories': <QuerySet [<Category: django>, <Category: python>]> }



0
votes

Essayer:

{% for month, posts in month_posts.items %}

Vous pouvez faire cela parce que vous avez:

{% for post in posts %}

... qui itère à la fois sur les clés ( month ) et les valeurs ( posts ) de month_posts


3 commentaires

Lorsque je fais cela, je n'ai rien dans mon modèle. Il n'imprime rien.


Vous avez changé votre question, avez-vous également changé cela dans votre code?


Oui je l'ai fait. Je le colle mal. J'étais un peu stressée. Je l'ai résolu et j'ai répondu à la question avec votre commentaire, merci!



0
votes

J'ai résolu le problème en créant ma liste, dans mon views.py, sans:

{% for post in posts %}

Cela provoquait le problème où je ne pouvais pas lire la liste dans la clé de contexte month_posts. J'ai mis en œuvre comme:

{% for month, posts in month_posts.items %}

Donc, dans le modèle, j'ai pu lire comme:

# Posts by month
month_posts = {}
for paged_post in paged_posts:
    month = paged_post.publish_date.strftime('%B')
    if not month in month_posts:
        month_posts[month] = []
        month_posts[month].append(paged_post)
    else:
        month_posts[month].append(paged_post)

et

from collections import defaultdict

month_posts = defaultdict(list)
for paged_post in paged_posts:
    month = paged_post.publish_date.strftime('%B')
    month_posts[month].append(paged_post)


0 commentaires