树枝,加上第一课和最后一课

比方说,我有这样的for循环:

{% for elem in arrMenu %} <div class="topmenu-button"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %} 

在这种forms下,它会呈现如下:

 <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> 

如何可以帮助我添加第一个和最后一个类的div,所以我会有这样的结果:

 <div class="topmenu-button first"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button last"><a href="url">name</a></div> 

你可以使用“特殊variables” loop.firstloop.last来达到你想要的。

链接

 {% for elem in arrMenu %} {% if loop.first %} <div class="topmenu-button first"> {% elseif loop.last %} <div class="topmenu-button last"> {% else %} <div class="topmenu-button"> {% endif %} <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %} 

编辑:取决于多less你关心的“一例”,你可能需要这样的解决scheme。

 {% for elem in arrMenu %} {% set classes = ["topmenu-button"] %} {% if loop.first %}{% set classes = classes|merge(["first"]) %}{% endif %} {% if loop.last %}{% set classes = classes|merge(["last"]) %}{% endif %} <div class="{{ classes|join(" ") }}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %} 

由于一个循环不能同时first和结束,所以我不想使用elseif并写入(DRY – 如果将来必须更改topmenu-button怎样?):

 {% for elem in arrMenu %} {% set append %} {% if loop.first %}first{% endif %} {% if loop.last %}last{% endif %} {% endset %} <div class="topmenu-button {{ append }}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %} 

或更简洁:

 {% for elem in arrMenu %} <div class="topmenu-button {% if loop.first %}first{% endif %} {% if loop.last %}last{% endif %}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %} 

编辑 :这样你会得到一些额外的空间在class属性(这是完全好的btw)。 编辑2 :这将不会处理1元素的数组(首先=最后)

如果是pipe理一个标签的类属,三元条件会更好。

 <span class="topmenu-button {{ (loop.first) ? 'first' : '' }}">{{ item.text }}</span>