Bagaimana cara menulis for
lingkaran angka dalam template Django? Maksud saya sesuatu seperti
for i = 1 to n
Bagaimana cara menulis for
lingkaran angka dalam template Django? Maksud saya sesuatu seperti
for i = 1 to n
Saya telah menggunakan teknik sederhana yang bekerja dengan baik untuk kasus-kasus kecil tanpa tag khusus dan tanpa konteks tambahan. Terkadang ini berguna
{% for i in '0123456789'|make_list %}
{{ forloop.counter }}
{% endfor %}
{% for i in "x"|rjust:"100" %}
sumber
Sayangnya, itu tidak didukung dalam bahasa template Django. Ada beberapa dari saran , tetapi mereka tampak sedikit rumit. Saya hanya akan meletakkan variabel dalam konteks:
dan di templat:
sumber
Pandangan saya tentang masalah ini, saya pikir adalah yang terbaik. Saya menyimpan my_filters.py di direktori templatetags.
Dan Anda akan menggunakan seperti ini:
sumber
range(1, 16)
untuk mendapatkan angka mulai dari 1, bukan 0.from django.template import Library;register = Library()
@register.filter(name='range') def filter_range(start, end): return range(start, end)
Kemudian akan digunakan sebagai{% for i in 1|range:6 %}{% endfor %}
. Lihat jawaban lengkap di bawah ini ....try: return range(number) except: return []
. Dengan cara itu tidak pernah memunculkan kesalahan dan mengembalikan array kosong (mirip dengan cara sebagian besar fungsi templat bekerja).Mungkin seperti ini
sumber
Anda dapat melewati pengikatan
ke template, lalu lakukan
Perhatikan bahwa Anda akan mendapatkan perilaku berbasis 0 (0, 1, ... n-1).
(Diperbarui untuk kompatibilitas Python3)
sumber
range(n)
dalam python 3, jika saya mengingatnya dengan benar, xrange sudah tidak digunakan lagiAnda tidak lulus
n
sendiri, melainkanrange(n)
[daftar bilangan bulat dari 0 hingga n-1 disertakan], dari tampilan Anda ke template Anda, dan yang terakhir Anda lakukan{% for i in therange %}
(jika Anda benar-benar bersikeras berbasis 1 daripada yang normal 0 Indeks berbasis yang dapat Anda gunakanforloop.counter
dalam tubuh loop ;-).sumber
Hanya memetikan orang lain menemukan pertanyaan ini ... Saya telah membuat tag template yang memungkinkan Anda membuat
range(...)
: http://www.djangosnippets.org/snippets/1926/sumber
Saya berusaha sangat keras pada pertanyaan ini, dan saya menemukan jawaban terbaik di sini: (dari cara loop 7 kali dalam template Django )
Anda bahkan dapat mengakses idx!
views.py:
html:
sumber
Anda dapat lulus:
{'n': range (n)}
Untuk menggunakan templat:
{% untuk i di n%} ... {% endfor%}
sumber
Anda harus menggunakan " slice " pada template, contohnya seperti ini:
di views.py
di store_list.html:
sumber
Metode ini mendukung semua fungsi dari
range([start,] stop[, step])
fungsi standar<app>/templatetags/range.py
Pemakaian:
Keluaran
sumber
for value in 0|range:"10,2"
. Anda harus mengubah kode Anda sebagai berikut:args = filter(lambda x: isinstance(x, int) and x >= 0, (_min, _max, _step))
Saya hanya mengambil jawaban populer sedikit lebih jauh dan membuatnya lebih kuat. Ini memungkinkan Anda menentukan titik awal, jadi 0 atau 1 misalnya. Ini juga menggunakan fitur jangkauan python di mana ujungnya satu kurang sehingga dapat digunakan secara langsung dengan panjang daftar misalnya.
Kemudian dalam template Anda cukup sertakan file tag template di atas dan gunakan yang berikut ini:
Sekarang Anda dapat melakukan 1-6 alih-alih hanya 0-6 atau mengkodekannya dengan keras. Menambahkan langkah akan membutuhkan tag templat, ini harus mencakup lebih banyak kasus penggunaan jadi ini adalah langkah maju.
sumber
Ini pada dasarnya membutuhkan suatu
range
fungsi. Tiket fitur Django dinaikkan ( https://code.djangoproject.com/ticket/13088 ) untuk ini tetapi ditutup sebagai "tidak akan diperbaiki" dengan komentar berikut.Mereka memiliki poin yang bagus - Template seharusnya merupakan representasi tampilan yang sangat sederhana. Anda harus membuat data yang diperlukan terbatas dalam tampilan dan meneruskan ke templat dalam konteks.
sumber
Kamu bisa memakai:
{% with ''|center: i as range %}
sumber
Jika nomor tersebut berasal dari model, saya menemukan ini sebagai tambalan yang bagus untuk model:
sumber
Bagi mereka yang mencari jawaban sederhana, hanya perlu menampilkan sejumlah nilai, katakanlah 3 dari 100 posting misalnya cukup tambahkan
{% for post in posts|slice:"3" %}
dan putar secara normal dan hanya 3 posting yang akan ditambahkan.sumber
sumber