首页 > 解决方案 > 如何使用 for 循环动态显示 {% django block %}?

问题描述

你好真棒人!

我正在为我的网站构建一个仪表板,在左侧部分,我有一个包含多个项目的菜单: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 类,我想突出显示当前视图,即当前项目。
当用户访问他的信使时,我想用 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叫 for messengeritem_messenger时,我会这样做

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

它不起作用,Messenger我选择的项目或任何东西都没有突出显示,我想知道为什么? 还有其他方法可以实现吗?

任何提示都会有所帮助,在此先感谢!

标签: djangodjango-templates

解决方案


您正试图让块标记将变量解释为它的名称。那是行不通的。

您将需要在模板上下文中传递活动项的键,然后在您的中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>

推荐阅读