Je comprends que Je travaille actuellement sur mon donc je voulais faire quelque chose comme p> mais je suis sûr que vous ne pouvez pas faire ce Toute suggestion ou astuces également les bienvenues. Merci d'avance! P> p> request.path code> me donnera l'URL actuelle.
base.html code> Modèle avec les onglets CSS et je veux le modèle pour savoir quel onglet est actuellement "actif" et passe
class = "actif-onglet" code> à un
code> tag. p>
si code> comparaison. Je veux aussi seulement que l'URL de base (?) Ignorer les paramètres d'obtention. P>
9 Réponses :
Vous pouvez calculer tout ce dont vous avez besoin ( Vous pouvez vérifier si une URL est le préfixe de l'autre. p> request.Path = inverse ('ordres_list') code> par exemple) à votre vue et transmettez le résultat au modèle. Dans la vue (code Python), vous pouvez manipuler le chemin autant que vous le souhaitez. P>
J'ai compris une façon piratée de le faire dans jQuery ... mais je suis toujours ouvert pour une meilleure solution.
jQuery: p> html: p>
Vous pouvez utiliser un Tag de modèle personnalisé
{% load my_tags %} {% url orders_list as orders %} <li class="{% active request orders %}"> <a href="{{ orders }}"> Orders </a> </li>
Essayez cette instruction JQuery:
$("[href='{{ request.path }}']").parents("li").addClass('active');
Inspiré de la réponse de Cougar:
$("[href='"+window.location.pathname+"']").addClass('active-tab');
Bâtiment sur la réponse de Josh, vous pouvez utiliser un simple "si" étiquette:
Je pense que cela devrait être la réponse acceptée car c'est le moyen le plus simple d'atteindre le résultat souhaité. Merci pour l'aide!
Une meilleure version de la réponse supérieure serait d'inverser le nom de la vue: Cette version ne nécessite pas de passer dans la demande code>. Au lieu de cela, nous indiquons que l'étiquette a besoin du contexte, puis obtenez la demande de celle-ci. P>
from django import template
from django.core.urlresolvers import reverse
register = template.Library()
@register.simple_tag(takes_context=True)
def url_active(context, viewname):
request = context['request']
current_path = request.path
compare_path = reverse(viewname)
if current_path == compare_path:
return 'active'
else:
return ''
Utilisation: {% url_active "home" "autre vue" "and-SO-ON" SUCCESS = "CLASSE SPÉCIFIQUE ACTIVE"%} CODE>
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def url_active(context, *args, **kwargs):
if 'request' not in context:
return ''
request = context['request']
if request.resolver_match.url_name in args:
return kwargs['success'] if 'success' in kwargs else 'active'
else:
return ''
une solution avec une option if-then-else:
ton code fonctionne bien. Existe-t-il un moyen d'écrire un cas de test simple pour cela? Je veux conserver notre pourcentage de couverture de test. A écrit une question si question pour exactement cette demande à
Je suppose que c'est testable. Je ne sais pas comment. Vous devriez jeter un oeil à la façon dont Django teste ses balises (par exemple github.com/django/django/blob/... )