Bootstrap dropdown list won't work in django html template

I am trying to apply bootstrap in my shared html file in a Django project and the dropdown list just won't work I tried everything I could cdn local bootstrap and when I click the dropdown list nothing happens.

Below is the template file:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.min.css' %}">
  
    <title> {% block title %}{% endblock %} </title>
</head>
    <body>
        <nav class="navbar navbar-expand-md navbar-dark bg-dark">
            <a class="navbar-brand" href="{% url 'home' %}">Home</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarCollapse" aria-controls="navbarCollapse"
            aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarCollapse">
                {% if user.is_authenticated %}
                    <ul class="navbar-nav ms-auto">
                        <li class="nav-item">
                            <a class="nav-link dropdown-toggle" href="#" id="userMenu"
                            data-toggle="dropdown" aria-haspopup="true"
                            aria-expanded="false">
                            {{ user.username }}
                            </a>
                            <div class="dropdown-menu dropdown-menu-right"
                                aria-labelledby="userMenu">
                                <a class="dropdown-item"
                                href="{% url 'upload'%}">Upload</a>
                                <div class="dropdown-divider"></div>
                                <a class="dropdown-item" href="{% url 'logout' %}">
                                Log Out</a>
                            </div>
                        </li>
                    </ul>
                {% else %}
                        <form class="form-inline ms-auto">
                        <a href="{% url 'login' %}" class="btn btn-outline-secondary">
                        Log In</a>
                        <a href="{% url 'signup' %}" class="btn btn-primary ms-2">
                        Sign up</a>
                        </form>
                {% endif %}
            </div>
        </nav>
        <div class="container">
            {% block content %}
            {% endblock content %}
        </div>
        <script src="{% static 'js/bootstrap.bundle.js'%}"></script>
        <script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
        <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    </body>
</html>

Upvotes: 0

Views: 1193

Answers (2)

James
James

Reputation: 23

Also be sure to add Popper and Bootstrap's JS to your head tags otherwise dropdowns won't work!

<head>

<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="

</head>

Upvotes: 0

Sunderam Dubey
Sunderam Dubey

Reputation: 8837

Use data-bs-toggle='dropdown', refer from boostrap 5.0 docs and make sure that the user is authenticated.

Try this template code:

{% if user.is_authenticated %}
    <ul class="navbar-nav ms-auto">
        <li class="nav-item">
            <a class="nav-link dropdown-toggle" href="#" id="userMenu"
            data-bs-toggle="dropdown" aria-haspopup="true"
            aria-expanded="false">
            {{ user.username }}
            </a>
            <div class="dropdown-menu dropdown-menu-right"
                aria-labelledby="userMenu">
                <a class="dropdown-item"
                href="#">Upload</a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item" href="#">
                Log Out</a>
            </div>
        </li>
    </ul>
    
{% else %}
        <form class="form-inline ms-auto">
        <a href="#" class="btn btn-outline-secondary text-white">
        Log In</a>
        <a href="#" class="btn btn-primary ms-2 text-white">
        Sign up</a>
        </form>
{% endif %}

Upvotes: 1

Related Questions