Django - 根据网页更改活动导航栏模板

Posted

技术标签:

【中文标题】Django - 根据网页更改活动导航栏模板【英文标题】:Django - Change active navbar template based on webpage 【发布时间】:2016-12-13 00:35:39 【问题描述】:

我的 html 中有一个看起来像这样的模板。它使用引导类。

  <-- navbar-template.html>
  <div class="collapse navbar-collapse" id="myNavbar">
    <ul class="nav navbar-nav">
      <li><a href="/home/">Home</a></li>
      <li class='active'><a href="/members/">Members</a></li>
      <li><a href="#">Research</a></li> 
      <li><a href="#">Publications</a></li>
      <li><a href="#">Links</a></li>  
    </ul>
    <ul class="nav navbar-nav navbar-right">
      <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
    </ul>
  </div>

我喜欢活动类,但我需要根据 django 导航栏加载的页面来更改它是哪个列表对象。

我想你想在 home.html 文件中做这样的事情

<-- HOME -->
% include "navbar_template.html" with page="home"  %

###Do something with page variable in order to set the home list tag to active.

我必须写大量的 if else 语句还是有更简单的方法。也许与 django 中的 views.py 有什么关系

【问题讨论】:

【参考方案1】:

你可以这样做(我在我的页面上使用的示例解决方案):

<ul class="sidebar-nav--primary">
  % url 'main:home' as home %
  % url 'main:work' as work %
  % url 'main:personal' as personal %

  <li><a href=" home " % if request.path == home %class="active"% endif %>Home</a></li>
  <li><a href=" work " % if request.path == work %class="active"% endif %>Work</a></li>
  <li><a href=" personal " % if request.path == personal %class="active"% endif %>Personal</a></li>

</ul>

【讨论】:

【参考方案2】:

更简洁的方法是创建custom template tag。类似is_active:

# Inside custom tag - is_active.py
from django.template import Library
from django.core.urlresolvers import reverse
register = Library()

@register.simple_tag
def is_active(request, url):
    # Main idea is to check if the url and the current path is a match
    if request.path in reverse(url):
        return "active"
    return ""

并像这样在您的模板中使用它:

# template.html
% load is_active %
<li><a href="% url 'home' %" class="% is_active request 'home' %">Home</a></li>

【讨论】:

所以它是相同的 url 类得到空字符串和? 标签在这两种情况下都有效。 @darek_82 如果请求的当前 url 与 django url 'home' 匹配,则 标记具有 css 类“活动”,否则它没有任何 css 类。

以上是关于Django - 根据网页更改活动导航栏模板的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs中实现导航栏

如何在 django 导航栏下拉列表中显示活动链接?

网站搭建 (第04天) 导航栏与页脚

更改活动导航项的颜色并显示相对于导航栏项的页面

我的 django 模板导航栏无法正常工作

导航链接在导航栏中不起作用(Bootstrap)(Django)