Comment lister des éléments dans mes modèles Django?
-
07-07-2019 - |
Question
Je travaille avec django Publisher, par exemple, je souhaite répertorier tous les éditeurs de la base de données via mon modèle list_publisher.html. Mon modèle ressemble à;
{% extends "admin/base_site.html" %}
{% block title %}List of books by publisher{% endblock %}
{% block content %}
<div id="content-main">
<h1>List of publisher:</h1>
{%regroup publisher by name as pub_list %}
{% for pub in pub_list %}
<li>{{ pub.name }}</li>
{% endfor %}
</div>
{% endblock %}
mais quand je lance " http://127.0.0.1:8000/list_publisher/ / a> " le modèle n'imprime que le titre de la page sans erreur! Qu'est-ce que je fais mal?
La solution
Quelques suggestions:
- vérifiez que votre base_site.html définit une
{% block content %}{% endblock %}
section à affiner par votre my list_publisher.html - vérifiez la cardinalité de votre liste:
{%regroup publisher by name as pub_list %}{{ pub_list|length }}
. Cela devrait au moins afficher la longueur de votre liste. Si is is '0' ... vous savez pourquoi il n'affiche rien - vérifiez que votre liste est bien triée par nom avant d'utiliser regrouper ou utilisez un
{% regroup publisher|dictsort:"name" by name as pub_list %}
pour être sûr
Si la longueur est "0", vous devez vous assurer que l'éditeur est défini (a été initialisé à partir de la base de données) et trié correctement.
En d'autres termes, voyez-vous n'importe où (dans votre modèle ou dans les modèles définis):
publisher = Publisher.objects.all().order_by("name")
?
(encore une fois, l'ordre par nom est important pour que votre balise de regroupement fonctionne correctement)
Autres conseils
Bonne réponse de VonC.
Une façon rapide et sale de consulter pub_list consiste à coller [{{pub_list}}]
dans votre modèle. Je le mets entre crochets au cas où il serait vide. BTW, vous pouvez obtenir quelque chose qui ressemble à [,,,,,]
. En effet, les références aux objets sont encapsulées dans & Lt; & Gt; et votre navigateur va WTF? Il suffit de faire un View Source et vous verrez le résultat complet.