2

我有一个名为main.html的基本模板:

<ul>
  <li>index</li>
  <li>about</li>
  <li>contacts</li>
</ul>

我有一个模板index.html,它有:

{% extends "main.html" %}

如何<li>根据命名继承人将类属性添加到标签中?

例如,如果index.html扩展main.html,那么我添加class="active"到 first <li>,如果about.html扩展main.html,那么我添加class="active"到 second <li>.... 等等。

我该怎么做?

4

3 回答 3

1

一种方法是保持 main.html 原样并通过调用 super 在子级别(about.html 等)覆盖它?我没有测试过这段代码,但类似:

main.html

{% block menu_bar %}
<ul>
  <li>index</li>
  <li>about</li>
  <li>contacts</li>
</ul>
{% endblock %}

about.html

{% block menu_bar %}
<li class="active">about</li>
{{ super() }}
{% endblock %}
于 2013-03-04T14:38:02.823 回答
0

有两种解决方案:

第一种方法是定义一个宏并从子页面(而不是继承的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.html should considerg.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>
于 2013-03-04T12:32:12.950 回答
0

菜单.html

<ul>
  <li class="{% if active_menu == 'index' %}active{% endif %}">index</li>
  <li class="{% if active_menu == 'about' %}active{% endif %}">about</li>
  <li class="{% if active_menu == 'contacts' %}active{% endif %}"contacts</li>
</ul>

索引.html

{% extends "main.html" %}

{% include "menu.html" with active_menu='index' %}

about.html

{% extends "main.html" %}

{% include "menu.html" with active_menu='about' %}

联系人.html

{% extends "main.html" %}

{% include "menu.html" with active_menu='contacts' %}
于 2013-03-04T14:46:03.200 回答