有两种解决方案:
第一种方法是定义一个宏并从子页面(而不是继承的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 of
main.html should consider
g.active_menu_item` 考虑在内。像:
主要.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>