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.
3 Réponses :
Avez-vous renvoyé le contexte (month_posts) avec la fonction de rendu?
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>]> }
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
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!
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)