Как отобразить {% django block%} динамически с помощью цикла for? - PullRequest
0 голосов
/ 01 июня 2018

Привет, классные люди!

Я создаю панель управления для своего сайта, в левой части у меня есть меню, содержащее несколько пунктов: Home, Messenger,Job Offers ....
При создании учетной записи пользователи могут выбирать свои товары, изменять их порядок или удалять.

У меня есть 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 = ......

Для меню пользователя, в моем base_template я отображаю элементы текущих пользователей с помощью цикла for.С помощью класса CSS я хочу выделить текущий вид, текущий элемент.
Когда пользователь посещает свой мессенджер, я хочу выделить этот элемент Messenger с помощью класса CSS.

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

Теперь, когданапример, находясь в messenger.html, зная, что у меня есть unique_key для мессенджера под названием item_messenger, я выполняю

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

Это не работает, элемент Messenger или что-то, что я выбираю, невыделяться, интересно почему? Есть ли другой способ добиться этого?

Любая подсказка будет полезна, заранее спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Вы пытаетесь заставить тег блока интерпретировать переменную как ее имя.Это не работает.

Вам нужно будет передать ключ активного элемента в контексте шаблона, а затем в вашем base_template вы можете просто сделать простое выражение if, чтобы добавить класс active вправильная запись.

<ul>
    {% for item in user.menu.items.all %}
        <li class='{% if item.unique_key == active_key %}active{% endif %}'>
            <a href="{{item.url}}"> {{item.name}}</a>
        </li>
    {% endfor %}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...