2014-07-30 2 views
14

Я использую Django и интегрированный Bootstrap с Django. Вот мой код HTML для панели навигации:Сделать вкладку активным в Bootstrap

<div class="navbar navbar-default navbar-fixed-top" role="navigation"> 
    <div class="container"> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
     <span class="sr-only">Toggle navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#">Project name</a> 
    </div> 
    <div class="navbar-collapse collapse"> 
     <ul class="nav navbar-nav"> 
     <li class="active"><a href="#">Home</a></li> 
     <li ><a href="#">About</a></li> 
     <li><a href="#">Contact</a></li> 
     <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Games <span class="caret"></span></a> 
      <ul class="dropdown-menu" role="menu"> 
      <li><a href="#">RacingDNA</a></li> 
      <li><a href="#">Skater Game</a></li> 

      </ul> 
     </li> 
     </ul> 
    </div><!--/.nav-collapse --> 
    </div> 
</div> 

Я также написал CSS для активной панели навигации. Здесь активна только одна панель навигации. Я хочу сделать активную панель навигации нажатой и, таким образом, применить мой CSS. Мой CSS работает идеально для активной панели навигации и для этой ситуации только для одного.

Я гугле и нашел решение, чтобы добавить этот JQuery:

$('.nav.navbar-nav > li').on('click', function (e) { 
e.preventDefault(); 
$('.nav.navbar-nav > li').removeClass('active'); 
$(this).addClass('active'); 

});

Теперь вот где я застрял. Я не знаю, где написать этот jQuery.

Я поместил этот файл в папку static/js и назвал этот код nav-bar.js. Однако улучшения нет. Где я ошибаюсь и где я делаю ошибки?

+0

Мне нравится это решение, менее тесно связанное с принятым ответом: [Pythonic способ добавления класса = "active" в navbar (Django)] (https: //www.reddit.com/r/learnpython/comments/3hy3k5/pythonic_way_of_adding_classactive_to_navbar /) – User

+0

Решение пользователя выше достаточно точное, перейдите по ссылке для получения пояснения. Вкратце, добавьте ..... class = "{% ifequal request.path" '%} active {% endifequal%} "..... каждому объекту" li "в вашей навигации. С замененным в нем соответствующим . – Rickka

ответ

19

Это решение не работает, если атрибут href ваших ссылок будет отличаться от href="#". Зачем ? Просто потому, что каждый клик по ссылке запускает запрос на сервер. В вашем JS-коде вы добавляете метод preventDefault() во избежание этого базового поведения, но я думаю, что на самом деле это не ваша цель для этой цели, не так ли?

Для обработки такого рода функции вы можете обновить свой код шаблона, добавляя что-то вроде этого:

base.html

<div class="collapse navbar-collapse" id="tn-navbar-collapse"> 
    <ul class="nav navbar-nav"> 
     <li class="{% if nbar == 'home' %}active{% endif %}"> 
      <a href="/">HOME</a> 
     </li> 
     ... 
    </ul> 
</div> 

views.py

def your_view(request): 
    ... 
    return render(request, 'yourtemplate.html', {'nbar': 'home'}) 

Таким образом, вам не нужно управлять этой функцией с помощью javascript.

+0

ты спас мой день, приятель! – oskarko

1

вы можете просто добавить JQuery между

<script type="text/javascript"> 
    </script> 

в вас HTML

+1

Я пробовал, но не работал – gamer

0

После добавления JavaScript геймера в ваш шаблон code_here, вы должны убедиться, что у вас есть подобные настройки в файле CSS также, в чтобы сделать работу JavaScript.

.navbar-nav > li.active > a { 
    color: #d74b4b; 
    background: transparent; 
    border-bottom: none; 
} 
8

Если вы не хотите, чтобы отправить любой дополнительный контекст от взглядов, то вы можете справиться с этим, как это с resolver_match:

<li {% if request.resolver_match.url_name == 'home' %}class="active"{% endif %}> 
    <a href="/">HOME</a> 
</li> 

, где «дом» это название для вашего шаблона URL-адрес для/(вероятно, '^$') в вашем urls.py. Так что, очевидно, чтобы использовать это, вам нужно назвать все ваши шаблоны url, что в любом случае является хорошей практикой.

Смежные вопросы