I have template that adds a navbar and uses Bootstrap 4. For a couple of navbar links I have a dropdown. For the first dropdown, under the Admin link. I want the dropdown menu to appear directly below the link. However the dropdown menu is appearing on the left-hand side of the page.
Any ideas to get this to appear below the Admin link?
The template:
<!DOCTYPE html>
{% load static %}
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}{% endblock title %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<!-- Custom CSS -->
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}"/>
</head>
<section class="header">
<div class="header-top-line bg-primary">
<div class="container">
<div class="row">
<nav class="navbar navbar-expand navbar-dark navbar-short justify-content-between w-100">
<a class="nav-link text-white">
<span class"text-uppercase"></span>
</a>
</nav>
</div>
</div>
</div>
<div class="header-main bg-white">
<div class="container">
<div class="row">
<nav class="navbar navbar-expand-lg navbar-light bg-light w-100">
<a class="navbar-brand" href="{% url 'home' %}">{{ cname.company_name }}</a>
{% if user.is_authenticated %}
<ul class="navbar-nav mr-auto">
<li class="nav-item"></li>
</ul>
{% endif %}
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
{% if perms.accounts.can_add_user %}
<li class="nav-item">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item"
href="{% url 'employee_add' %}">Add User</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'admin:index' %}">
Admin Panel</a>
</div>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link" text="uppercase" data-toggle="none" href="/">
Home
</a>
</li>
<a class="nav-link" text="uppercase" data-toggle="none" href="/directory/">
Directory
</a>
</li>
<li class="nav-item">
<a class="nav-link" text="uppercase" data-toggle="none" href="/documents/">
Company Documents
</a>
</li>
<li class="nav-item">
<a class="nav-link" text="uppercase" data-toggle="none" href="/projects/">
Projects
</a>
</li>
{% if user.is_authenticated %}
<li class="nav-item">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ user.username }}
</a>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item"
href="">Change password</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'account_logout' %}">
Log Out</a>
</div>
</li>
</ul>
{% else %}
<form class="form-inline ml-auto">
<a href="{% url 'account_login' %}" class="btn btn-outline-secondary">
Log In</a>
<a href="{% url 'account_signup' %}" class="btn btn-primary ml-2">
Sign up</a>
</form>
{% endif %}
<form class="form-inline my-2 pl-2 my-lg-0" method=GET action="{% url 'search_view' %}">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" name="q">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
</div>
</div>
</div>
</section>
</html>
Got some help from a knowledgable person. It turns out I needed to add the class of dropdown to the list parent or you don't get a stacking context. eg. <li class="nav-item dropdown">
I also needed to give each dropdown a unique id and match the ids to the aria-labelledby attribute on the dropdown itself.
Added to the html:
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="adminDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin
</a>