Reputation: 4299
I have developed a Django app with a fixed top navbar, but it sometimes flickers / refreshes when clicking the menu items. Have I made a mistake in extending the templates or it is something else causing this?
Here is the app deployed that you can see it: http://azeribocorp.pythonanywhere.com/index/
__base.html:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
{% block meta_tags %}{% endblock meta_tags%}
<title>
{% block title %}Azeribo Tracking{% endblock title %}
</title>
{% block stylesheets %} {% endblock stylesheets %}
{% block js %} {% endblock js %}
</head>
<body>
<header class="topnavbar" id="TNB" >
{% include 'aztracker/_topnavbar.html' %}
</header>
<div id="main" role="main">
<div class="container">
{% block content %}
{% endblock content %}
</div>
</div> {# /#main #}
</body>
</html>
search_form.html:
{% extends 'aztracker/__base.html' %}
{% load staticfiles %}
{% load static %}
{% block stylesheets %}
<link rel="stylesheet" type="text/css" href="{% static 'css/__main.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/search_form.css' %}">
{% endblock %}
{% block content %}
{% block main_col %}
<section class="search_section">
<form method="POST" action="/search/">
{% csrf_token %}
<input required type="search" placeholder="Country or Code" name="search_input_field" id="search_input">
<button id="search_btn" class="flat_button">Search</button>
</form>
</section>
<!-- view all country codes link -->
<div class="wrapper">
<a id="list_of_all_countries_link" href="/countries/"> List of All Countries and Codes </a>
</div>
{% endblock main_col %}
{% endblock content %}
_topnavbar.html:
{% load static %}
{% load staticfiles %}
{% block stylesheets %}
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap-iso.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
{% endblock %}
<!--Top Navigation-->
<nav role="navigation" class="nav" id="topnav">
<ul class="nav-items">
<li class="{% if request.resolver_match.url_name == 'index' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'index' %} class='nav-link'><span>Home</span></a>
</li>
<!--<li class="nav-item">
<a href={% url 'index' %} class="nav-link" ><span>Home</span></a>
</li>-->
<li class="{% if 'track_containers' in request.resolver_match.url_name %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'track_containers_import_data' %} class='nav-link'><span>Track Containers</span></a>
</li>
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href="#" class="submenu-link">Product #1</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">Product #2</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">Product #3</a></li>
</ul>
</nav>
</li>
<li class="{% if request.resolver_match.url_name == 'search' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'search' %} class='nav-link'><span>Search</span></a>
</li>
<li class="{% if request.resolver_match.url_name == 'report' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'report' %} class='nav-link'><span>Report</span></a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link" id="dd-more"><span>More</span></a>
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href="{% url 'about' %}" class="submenu-link">About</a></li>
<li class="submenu-item"><a href={% url 'contact_us' %} class="submenu-link">Contact us</a></li>
<li class="submenu-item"><hr class="submenu-seperator" /></li>
<li class="submenu-item"><a href="#" class="submenu-link">Support</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">FAQs</a></li>
</ul>
</nav>
</li>
<!--
<li class="{% if 'more' in request.resolver_match.url_name %}
nav-item dropdown active
{% else %}
nav-item dropdown
{% endif %}">
<a href='#'><span>More</span></a> <!- -js will take care of dropping the menu - ->
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href={% url 'about'%} class="submenu-link">About</a></li>
<li class="submenu-item"><a href={% url 'contact_us'%} class="submenu-link">Contact</a></li>
<li class="submenu-item"><hr class="submenu-seperator" /></li>
<li class="submenu-item"><a href={% url 'support'%} class="submenu-link">Support</a></li>
<li class="submenu-item"><a href={% url 'faqs'%} class="submenu-link">FAQs</a></li>
</ul>
</nav>
</li> -->
</ul>
</nav>
{% block js %}
<script type='text/javascript' src="{% static 'js/_topnavbar.js' %}"></script>
{% endblock js %}
__base.html [edit 1]:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
{% block meta_tags %}{% endblock meta_tags%}
<title>
{% block title %}Azeribo Tracking{% endblock title %}
</title>
<!-- styles and js required for topnavbar -->
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap-iso.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type='text/javascript' src="{% static 'js/_topnavbar.js' %}"></script>
{% block stylesheets %} {% endblock stylesheets %}
{% block js %} {% endblock js %}
</head>
<body>
<header class="topnavbar" id="TNB">
{% block topnavbar %}
{% include 'aztracker/_topnavbar.html' %}
{% endblock topnavbar %}
</header>
<div id="main" role="main">
<div class="container">
{% block content %}
{% endblock content %}
</div>
</div> {# /#main #}
</body>
</html>
search_form.html [edit 1]:
{% extends 'aztracker/__base.html' %}
{% load staticfiles %}
{% load static %}
{% block stylesheets %}
<link rel="stylesheet" type="text/css" href="{% static 'css/__main.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/search_form.css' %}">
{% endblock %}
{% block content %}
{% block main_col %}
<section class="search_section">
<form method="POST" action="/search/">
{% csrf_token %}
<input required type="search" placeholder="Country or Code" name="search_input_field" id="search_input">
<button id="search_btn" class="flat_button">Search</button>
</form>
</section>
<!-- view all country codes link -->
<div class="wrapper">
<a id="list_of_all_countries_link" href="/countries/"> List of All Countries and Codes </a>
</div>
{% endblock main_col %}
{% endblock content %}
_topnavbar.html [edit 1]:
{% load static %}
{% load staticfiles %}
{% block topnavbar %}
<!--Top Navigation-->
<nav role="navigation" class="nav" id="topnav">
<ul class="nav-items">
<li class="{% if request.resolver_match.url_name == 'index' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'index' %} class='nav-link'><span>Home</span></a>
</li>
<!--<li class="nav-item">
<a href={% url 'index' %} class="nav-link" ><span>Home</span></a>
</li>-->
<li class="{% if 'track_containers' in request.resolver_match.url_name %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'track_containers_import_data' %} class='nav-link'><span>Track Containers</span></a>
</li>
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href="#" class="submenu-link">Product #1</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">Product #2</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">Product #3</a></li>
</ul>
</nav>
</li>
<li class="{% if request.resolver_match.url_name == 'search' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'search' %} class='nav-link'><span>Search</span></a>
</li>
<li class="{% if request.resolver_match.url_name == 'report' %}
nav-item active
{% else %}
nav-item
{% endif %}">
<a href={% url 'report' %} class='nav-link'><span>Report</span></a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link" id="dd-more"><span>More</span></a>
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href="{% url 'about' %}" class="submenu-link">About</a></li>
<li class="submenu-item"><a href={% url 'contact_us' %} class="submenu-link">Contact us</a></li>
<li class="submenu-item"><hr class="submenu-seperator" /></li>
<li class="submenu-item"><a href="#" class="submenu-link">Support</a></li>
<li class="submenu-item"><a href="#" class="submenu-link">FAQs</a></li>
</ul>
</nav>
</li>
<!--
<li class="{% if 'more' in request.resolver_match.url_name %}
nav-item dropdown active
{% else %}
nav-item dropdown
{% endif %}">
<a href='#'><span>More</span></a> <!- -js will take care of dropping the menu - ->
<nav class="submenu">
<ul class="submenu-items">
<li class="submenu-item"><a href={% url 'about'%} class="submenu-link">About</a></li>
<li class="submenu-item"><a href={% url 'contact_us'%} class="submenu-link">Contact</a></li>
<li class="submenu-item"><hr class="submenu-seperator" /></li>
<li class="submenu-item"><a href={% url 'support'%} class="submenu-link">Support</a></li>
<li class="submenu-item"><a href={% url 'faqs'%} class="submenu-link">FAQs</a></li>
</ul>
</nav>
</li> -->
</ul>
</nav>
{% endblock topnavbar %}
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
{% block meta_tags %}{% endblock meta_tags%}
<title>
{% block title %}Azeribo Tracking{% endblock title %}
</title>
<!-- styles and js required for topnavbar -->
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap-iso.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
{% block stylesheets %} {% endblock stylesheets %}
{% block js %} {% endblock js %}
</head>
<body>
<header class="topnavbar" id="TNB">
{% block topnavbar %}
{% include 'aztracker/_topnavbar.html' %}
{% endblock topnavbar %}
</header>
<div id="main" role="main">
<div class="container">
{% block content %}
{% endblock content %}
</div>
</div> {# /#main #}
{% block extra-js %}
<script type='text/javascript' src="{% static 'js/_topnavbar.js' %}"></script>
{% endblock extra-js %}
</body>
</html>
__base.html [edit 2]:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
{% block meta_tags %}{% endblock meta_tags%}
<title>
{% block title %}Azeribo Tracking{% endblock title %}
</title>
<!-- styles and js required for topnavbar -->
<link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap-iso.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/_topnavbar.css' %}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
{% block stylesheets %} {% endblock stylesheets %}
{% block js %} {% endblock js %}
</head>
<body>
<header class="topnavbar" id="TNB">
{% block topnavbar %}
{% include 'aztracker/_topnavbar.html' %}
{% endblock topnavbar %}
</header>
<div id="main" role="main">
<div class="container">
{% block content %}
{% endblock content %}
</div>
</div> {# /#main #}
{% block extra-js %}
<script type='text/javascript' src="{% static 'js/_topnavbar.js' %}"></script>
{% endblock extra-js %}
</body>
</html>
Upvotes: 0
Views: 870
Reputation: 5017
If you will use WebDeveloperTools/Inspector or similar tools then you will notice that rewrite of stylesheets block in _tophavbar.html doesn't work. Js and css are included inside of body.
It happens because you are including _topnavbar.html into _base.html (without extension). It means that _topnavbar.html doesn't now anything about stylesheets block in _base.html template.
You can move menu js and css to the top template. Second solution is to implement different template inheritance __base.html -> __base_with_menu.html -> search_form.html
P.S. Also you have defined js block, so probably you want to include js files inside of it and not in stylesheets.
Upvotes: 1