Style active navigation element with a Flask/Jinja2 macro
我正在使用Flask / Jinja2和Bootstrap 3。
我想将
这些元素存储在
1 2 3 | /programme/23022014 /programme/24022014 /programme/25022014 |
我遵循了一些这样的示例,我的HTML代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <ul class="nav nav-pills"> {% for prog_id in prog_ids %} {% macro nav_link(endpoint, prog_id) %} {% if request.endpoint.endswith(endpoint) %} <li class="active"> <span class="badge pull-right">-</span> {{prog_id|strftime_b}} </li> {% else %} <li> <span class="badge pull-right">-</span> {{prog_id|strftime_b}} </li> {% endif %} {% endmacro %} {% endfor %} </ul> |
上面的代码中有任何错误吗? 因为,它什么也没显示。
您的代码只是一遍又一遍地定义一个宏,它不呈现任何内容。避免阅读
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul class="nav nav-pills"> <li class="{% block nav_here %}{% endblock %}">Here </li> <li class="{% block nav_there %}{% endblock %}">There </li> <li class="{% block nav_anywhere %}{% endblock %}">Anywhere </li> </ul> {% block content %}{% endblock %} |
1 2 3 4 5 | {% extends"base.html" %} {% block nav_there %}active{% endblock %} {% block content %} <blockquote>No matter where you go, there you are.</blockquote> {% endblock %} |
基本导航在
正确使用Jinja2宏。这确实是一个有用的功能。在这种情况下,您将无法正确理解其工作原理。这篇文章将很好地解释它。
这是导航菜单的宏。切记将此宏放在导航菜单代码上方。否则Jinja将在需要时找不到它。
1 2 3 4 5 6 7 8 9 10 11 12 13 | {% macro nav_link(endpoint, name) %} {% if request.endpoint.endswith(endpoint) %} <li class="active">{{name}} </li> {% else %} <li> {{name}} </li> {% endif %} {% endmacro %} |
您必须在模板文件中单独定义此代码块。不要将其放在循环中或其他任何地方。当您在模板中的任意位置调用宏时,此代码块将执行并提供所需的输出。查看如何使用此宏。
1 2 3 4 5 6 | <ul class="nav navbar-nav"> {{ nav_link('home', 'Home') }} {{ nav_link('about', 'About') }} {{ nav_link('contact', 'Contact Us') }} </ul> |
如果您像上面提到的那样使用macros.html,则可以使用以下代码导入宏。
这是jinja2模板制作的好教程。
由于某种奇怪的原因,上述解决方案对我不起作用。另外,您还必须分两部分添加代码。
我的简单解决方案。检查端点是否相等。,然后将其设置为活动状态。
1 2 | <li class="{% if request.endpoint =="new_message" %}active{% endif %}"><span class="glyphicon glyphicon-leaf"></span> Message </li> |