对于你的问题,在jinja2文档中有一个技巧:http://jinja.pocoo.org/docs/tricks/
如果你的列表足够简单,只需使用请求对象,类似这样:
<li {% if request.endpoint == item.endpoint %} class='active' {% endif %}>
<a href="{{url_for(endpoint)}}">{{item.text}}</a>
</li>
通常我会将这段代码编写为一个宏,通过显式参数来设置active
:
{% macro render_sitem(endpoint, display, cls='', icon-cls='', active='') %}
<li {% if request.endpoint == endpoint or active == endpoint %} class='active' {% endif %}>
<a class='{{cls}}' href="{{url_for(endpoint)}}"><i class="{{icon-cls}}"></i> {{display}}</a>
</li>
{% endmacro %}
列表应该长这样:
<ul class="nav nav-list">
{{render_sitem('page.index', _('Pages'), icon-cls='icon-sitemap', active=active_page)}}
{{render_sitem('post.index', _('Posts'), icon-cls='icon-file', active=active_page)}}
{{render_sitem('user.index', _('Users'), icon-cls='icon-group', active=active_page)}}
</ul>
如果您有一个扩展或包含列表的子页面,您可以设置活动项,例如:
{% set active_page = 'page.index' %}
在你的子页面顶部。