Question

Dans le langage de modèle de Django, vous pouvez utiliser {% url [viewname] [args] %} pour générer une URL vers une vue spécifique avec des paramètres.Comment pouvez-vous faire la même chose par programmation dans le code Python ?

Ce dont j'ai besoin, c'est de créer une liste d'éléments de menu où chaque élément a un nom, une URL et un indicateur actif (qu'il s'agisse de la page actuelle ou non).En effet, il sera beaucoup plus propre de faire cela en Python qu'avec le langage de modèle.

Était-ce utile?

La solution

Si vous devez utiliser quelque chose de similaire au {% url %} balise template dans votre code, Django fournit la django.core.urlresolvers.reverse().Le reverse la fonction a la signature suivante :

reverse(viewname, urlconf=None, args=None, kwargs=None)

https://docs.djangoproject.com/en/dev/ref/urlresolvers/

Autres conseils

J'utilise deux approches différentes dans mon models.py.Le premier est le permalink décorateur:

from django.db.models import permalink

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)

Vous pouvez également appeler reverse directement:

from django.core.urlresolvers import reverse

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return reverse('project.app.views.view_name', None, [str(self.id)])

Sachez qu'en utilisant reverse() nécessite que votre module urlconf soit 100 % sans erreur et puisse être traité - je ne le fais pas ViewDoesNotExist erreurs ou plus, ou vous obtenez le redoutable NoReverseMatch exception (les erreurs dans les modèles échouent généralement silencieusement, ce qui entraîne None).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top