In Django 1.9 habe ich eine Datenbanktabelle, die Automarken enthält. Ich versuche, einen Index von Automarken zu erstellen, wie er in einem Lehrbuch zu finden ist. Zum Beispiel:Iterieren durch ein Objekt in Django Vorlage
A
Aston Martin
Audi
...
B
Bentley
BMW
...
Hier ist Code aus meiner Ansicht. py:
def home(request):
car_index = {}
alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z']
for letter in alphabet:
car_index[letter] = {}
car_index[letter]['title'] = letter
car_index[letter]['brands'] = Cars.objects.filter(brand__startswith = letter)
return render(request, 'cars/home.html', {'car_index':car_index})
Hier ist Code aus meiner home.html Vorlage:
{% for each in car_index %}
{{ each.title }}
{% for brand in each.brands %}
<a href="{{ brand.link }}">{{ brand.name }}</a><br>
{% endfor %}
{% endfor %}
In view.py, ich habe versucht, .values()
im queryset, .items()
im Template-Kontext. In der Vorlage habe ich versucht car_index.items
, each.brands.items
, each.brands[0]
. Nichts funktioniert. Mit dem obigen Code bekomme ich die Titel: E D X I A U H B T S N K Q Z J Y W V O L R F G P C M, aber keine Links. (Ich weiß, wie zu sortieren, aber die Arbeit auf Links zuerst)
ich gelesen habe:
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#for
how to iterate through dictionary in a dictionary in django template?
sieht gut aus, was sehen Sie, wenn Sie 'each.brands' in Vorlage drucken? – doniyor
Können Sie das Ergebnis von '{% für jedes in car_index%} {{each}} {% endfor%}' anzeigen. Haben Sie auch versucht, '{% für Schlüssel, Wert in jedem. Artikel%}' – kapilsdv
@Doniyor 'each.brands' war leer. @KapilSachdev, Ihr Kommentar hat mir geholfen, es herauszufinden. Geänderter Code zu: '{% für k, v in car_index.items%}' und '{{v.title}}' und '{% für Marke in v.brands%}'. Argh, nachdem ich auf andere SO-Antworten zurückgekommen bin, kann ich die Antwort jetzt in Sichtweite sehen. Aber mit ihren Daten strukturiert ein bisschen anders, machte mein Gehirn nicht den Sprung. Danke Leute. Ich kenne die SO-Etikette nicht, um die akzeptierte Antwort auf einen Kommentar zu geben, der beantwortet. – FeFiFoFu