Причина, по которой это происходит, заключается в том, что при нажатии на ссылку вы перенаправляетесь на новую страницу. Так что стили, установленные через JS reset. Я хотел бы установить id для каждого из ваших элементов навигации, а затем при загрузке страницы добавить активный класс, например:
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<ul class="navbar-nav">
<li id="link-football" class="nav-item active">
<a class="nav-link active" href="{% url 'page1' %}"> Football
<span class="sr-only">(current)</span></a>
</li>
<li id="link-overview" class="nav-item">
<a class="nav-link" href="{% url 'page2' %}">Overview</a>
</li>
</ul>
</div>
тогда при загрузке страницы вы можете сделать это:
//on the football page
$(document).ready(function(){
$(".active").removeClass("active");
$("#link-football").addClass("active");
});
Дальнейшие объяснения:
Любой стиль, который вы добавляете через javascript, отражается в DOM, но он не переопределяет исходный файл. Таким образом, ваша статическая страница всегда имеет .active
на странице футбола. Когда вы загружаете / перезагружаете страницу либо с помощью F5, либо с помощью JS-скрипта, вы также перезагружаете этот статический файл, и никакие изменения, сделанные с помощью JS, не отображаются. Вот почему я говорю добавить active
класс после загрузки страницы, потому что тогда вы можете знать, на какой странице вы находитесь, и, следовательно, вызывать активную ссылку.
Я бы также посоветовал не устанавливать ничего активным по умолчанию. Вы можете сделать домашнюю страницу активной по умолчанию, я вижу, что это произойдет, но это может привести к путанице, если вы забудете добавить вышеуказанный скрипт на новую страницу.
Замечания по использованию IDE и / или расширению с использованием {% extends 'base.html' %}
Чтобы заставить его работать при расширении **base.html**
, добавьте {% block content %}
к концам страницы. т.е.
{% block content %}
{% endblock %}
</body>
</html>
И на каждой последующей .html странице переносите JS с <script> </script>