Untuk menggemakan / memperluas komentar Jeff, apa yang saya pikir harus Anda tuju hanyalah sebuah properti di kelas Pilihan Anda yang menghitung jumlah suara yang terkait dengan objek itu:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice=self).count()
votes = property(calculateVotes)
Dan kemudian di templat Anda, Anda dapat melakukan:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
Tag templat, IMHO sedikit berlebihan untuk solusi ini, tetapi juga bukan solusi yang buruk. Tujuan dari template di Django adalah untuk melindungi Anda dari kode di template Anda dan sebaliknya.
Saya akan mencoba metode di atas dan melihat apa yang dihasilkan ORM SQL karena saya tidak yakin di atas kepala saya apakah itu akan melakukan pre-cache properti dan hanya membuat subselect untuk properti atau jika itu akan berulang / on- permintaan menjalankan kueri untuk menghitung jumlah suara. Tetapi jika itu menghasilkan pertanyaan mengerikan, Anda selalu dapat mengisi properti di tampilan Anda dengan data yang telah Anda kumpulkan sendiri.
.items
panggilan (seperti yang diilustrasikan dalam salah satu jawaban lain) adalah solusi yang jauh lebih sederhana.Inilah templatnya:
Pada dasarnya,
.items
adalah kata kunci Django yang membagi kamus menjadi daftar(key, value)
pasangan, seperti metode Python.items()
. Ini memungkinkan iterasi di atas kamus dalam template Django.sumber
items
adalah panggilan metode Python di kamus, bukan kata kunci Django. Seperti yang ditunjukkan Alex Martelli , pada dasarnya sama denganiteritems
. Sebagai Wilhelm menjawab, pencarian kamus adalah 3 diutamakan untuk pencarian titik. Jika Anda memiliki item dalam kamus Anda bernama'items'
, Anda akan mendapatkan nilai itu kembali daripada daftar tupel. Untuk menguji: tambahkan{'items':'oops'}
ke kamus Anda dan Anda akan mendapatkan daftar suratAnda dapat menggunakan notasi titik:
sumber
my_dict[1][2]
templat:my_dict.1.2
d.key.1
- perhatikan yang kedua.
Anda perlu menemukan (atau menetapkan) tag templat 'dapatkan', misalnya, di sini .
Definisi tag:
Dan itu digunakan seperti:
sumber
h.get(key,'default_value')
karena KeyErrorGunakan Item Kamus:
sumber
django_template_filter filter name get_value_from_dict
sumber
Mirip dengan jawaban oleh @russian_spy:
Ini mungkin cocok untuk memecah kamus yang lebih kompleks.
sumber
Idealnya, Anda akan membuat metode pada objek pilihan yang menemukan dirinya dalam suara, atau membuat hubungan antara model. Tag templat yang melakukan pencarian kamus juga akan berfungsi.
sumber