Bagaimana cara menampilkan {% Django block %} secara dinamis dengan for loop?

Halo Orang-Orang Luar Biasa!

Saya sedang membuat dasbor untuk situs web saya, di bagian kiri, saya memiliki menu yang berisi beberapa item: Home, Messenger, Job Offers ....
Saat membuat akun, Pengguna dapat memilih item mereka, lalu memesan atau menghapus.

Saya memiliki model Menu & Item,

class Menu(models.Model):
     items = models.ManyToManyField('Item',blank=True)

class Item(models.Model):
     name = models.CharField(max_length=100)
     unique_key = models.CharField(max_length=100,unique=True)
     url = ......

Untuk menu pengguna, di base_template saya menampilkan item pengguna saat ini dengan for loop. Dengan kelas CSS saya ingin menyorot tampilan saat ini, item saat ini.
Saat pengguna mengunjungi messenger-nya, saya ingin menyorot item messenger tersebut dengan kelas CSS.

 <ul>
     {% for item in user.menu.items.all %}
     <li class='{% block item.unique_key %}{% endblock %}'>
          <a href="/id{{item.url}}"> {{item.name}}</a>
     </li>
     {% endfor %}
 </ul>

Sekarang, ketika berada di messenger.html misalnya, mengetahui bahwa saya memiliki unique_key untuk messenger bernama item_messenger, saya melakukannya

{% block 'item_messenger' %}active{% endfor%}

Tidak berfungsi, item Messenger atau apa pun yang saya pilih tidak disorot, saya heran kenapa? Apakah ada cara lain untuk mencapainya?

Petunjuk apa pun akan sangat membantu, terima kasih sebelumnya!


person Community    schedule 01.06.2018    source sumber
comment
Saya tidak mengerti mengapa Anda ingin melakukan itu dengan blok. Mengapa tidak hanya variabel yang Anda bandingkan dengan kunci unik? <li class="{% if active_key == item.unique_key %}active{% endblock %}">   -  person Daniel Roseman    schedule 01.06.2018
comment
@DanielRoseman Saya melakukannya karena sebelum harus menampilkan elemen dengan cara ini dengan satu lingkaran, saya memasukkannya ke dalam templat sebagai daftar normal satu per satu yang berisi kelas <li class = '{% block item_name %} {% endblock %}'>. Lalu di bagian atas setiap halaman, saya menambahkan {% block item_name %} active {% endblock %}. Saya sudah memiliki semua halaman saya dengan tag block di bagian atas, itulah sebabnya saya harus menggunakan block dalam satu lingkaran. Cara Anda menunjukkannya kepada saya, sudah saya pikirkan, tetapi saya harus memiliki active_key sebagai variabel konteks di setiap tampilan; Saya memiliki banyak pandangan.   -  person    schedule 01.06.2018


Jawaban (1)


Anda mencoba agar tag blok menafsirkan variabel sebagai namanya. Itu tidak berhasil.

Anda harus meneruskan kunci item aktif dalam konteks templat dan kemudian di base_template Anda cukup melakukan pernyataan if sederhana untuk menambahkan kelas active ke entri yang benar.

<ul>
    {% for item in user.menu.items.all %}
        <li class='{% if item.unique_key == active_key %}active{% endif %}'>
            <a href="/id{{item.url}}"> {{item.name}}</a>
        </li>
    {% endfor %}
</ul>
person Bran Handley    schedule 01.06.2018
comment
terima kasih atas jawaban anda, bisakah anda melihat balasan saya di atas (komentar pertanyaan), sehingga anda akan mengerti mengapa saya melakukannya dengan blok - person ; 01.06.2018