-1
votes

Comment changer la classe NAV "Active" sur différentes pages avec base.html

J'ai ma navigation NAV sur mon base.html code>, donc je l'étends sur toutes les autres pages. Mais j'ai une classe "actif" code> sur la page d'accueil, il reste donc aussi actif dans toutes les autres pages.

<ul class="navbar-nav">
    <li class="nav-item">
        <a class="nav-link active" href="http://127.0.0.1:8000/backend/">
            <i class="ni ni-shop text-primary"></i>
            <span class="nav-link-text">Dashboard</span>
        </a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="http://127.0.0.1:8000/backend/clientes">
            <i class="ni ni-ungroup text-orange"></i>
            <span class="nav-link-text">Clients</span>
        </a>
    </li>
</ul>


3 commentaires

Est-ce que cela répond à votre question? Django - mettre en surbrillance la navigation basée sur la page actuelle?


@Mihait je l'ai déjà essayé mais ça ne marche pas.


'ça ne marche pas'. Qu'est-ce qui ne fonctionne pas exactement? Quoi qu'il en soit, c'est une ancienne question / réponse. Votre situation actuelle pourrait différer légèrement, mais la logique reste la même. Je suis sûr qu'il y a des dizaines de réponses sur le net sur la manière de résoudre cette exigence


3 Réponses :


-1
votes

Envoyer nom fort> comme variable et valeur avec actif fort>. xxx pré>

Utilisez une variable comme suit: p>

<ul class="navbar-nav">
    <li class="nav-item">
        <a class="nav-link {{ dashboard }}" href="http://127.0.0.1:8000/backend/">
            <i class="ni ni-shop text-primary"></i>
            <span class="nav-link-text">Dashboard</span>
        </a>
    </li>
    <li class="nav-item">
        <a class="nav-link {{ clients }}" href="http://127.0.0.1:8000/backend/clientes">
            <i class="ni ni-ungroup text-orange"></i>
            <span class="nav-link-text">Clients</span>
        </a>
    </li>
</ul>


1 commentaires

Cela nécessite d'ajouter des valeurs de contexte spécifiques à chaque vue ... vraiment pas sec. Et les chances d'affrontements de nom avec cette mise en œuvre exacte sont très élevées.



-1
votes

Option 1 Vous pouvez utiliser Django Contex_Processors. Ajoutez votre paramètres.py xxx

]

dans votre context_file.py xxx p > Avec cette méthode, chaque demande décide quelle barre active. Et la variable Active_bar est passée à votre modèle. Dans votre modèle, vous pouvez ajouter une classe active si une variable Active_bar est égale à votre nom de votre barre. Comme celle-ci: xxx

option 2

Vous pouvez écrire un fichier JS personnalisé et ajouter votre base HTML. Dans ce fichier JS, vous pouvez détecter l'URL et décider du volet actif. Après cela, vous pouvez ajouter une classe active au volet de liste.


4 commentaires

Oui, je pense que le fichier JS sera le meilleur choix pour résoudre ce problème. Merci!


Veuillez ne pas vous conseiller d'utiliser des processeurs de contexte pour autre chose que d'injecter des valeurs simples. Les processeurs contextuels sont coûteux et sont systématiquement invoqués pour tous les modèles (même ceux qui n'en ont pas besoin), ainsi que des choses apparaissent automatiquement dans le contexte qui est un enfer de maintenance.


En outre, vous n'avez certainement pas besoin de JS pour savoir où vous êtes, la requête a déjà toutes les infos pertinentes.


@ JoãoDesousa Je vous suggère très fortement de choisir une meilleure solution - une étiquette de modèle personnalisée vous vient à l'esprit.



0
votes

Il n'y a pas de réponse unique - toutes les réponses à votre question, cela dépend vraiment de la structure de votre projet, de la hiérarchie de l'URL, etc. mais généralement, les meilleures solutions sont soit une étiquette de modèle personnalisée prenant la demande comme argument (et / ou Autres variables de contexte ou constantes ordinaires, en fonction de la logique de votre propre projet) pour calculer la "section" actuelle et rendre la barre de navigation en conséquence.


0 commentaires