有两种解决方案:
第一种方法是定义一个宏并从子页面(不是继承的main 页面)调用它,其中包含使<li> 处于活动状态的信息。
喜欢:
{% macro menu(active) %}
<ul>
{% if active == 'index' %}<li class="active">{% else %}<li>{%endif%}index</li>
{% if active == 'about' %}<li class="active">{% else %}<li>{%endif%}about</li>
{% if active == 'contacts' %}<li class="active">{% else %}<li>{%endif%}contacts</li>
</ul>
{% endmacro %}
并将其用作:
{% from 'macro.html' import menu %}
{{ macro('index') }} #in index.html
{{ macro('about') }} #in about.html
{{ macro('contacts') }} #in contacts.html
另一种方法是使用神奇的g 变量。在您的视图函数中定义哪个项目应该是活动项目并放入g 变量。喜欢:
from flask import g
app.route('/about')
def about():
...
g.active_menu_item = 'about'
...
return render_template('about.html')
并且您的about.html(索引和联系人也是)继承自main.html', so the codes that render menu ofmain.htmlshould considerg.active_menu_item`。喜欢:
main.html:
<ul>
{% if g.active_menu_item == 'index' %}<li class="active">{% else %}<li>{%endif%}index</li>
{% if g.active_menu_item == 'about' %}<li class="active">{% else %}<li>{%endif%}about</li>
{% if g.active_menu_item == 'contacts' %}<li class="active">{% else %}<li>{%endif%}contacts</li>
</ul>