Come generare URL in Django
-
09-06-2019 - |
Domanda
Nel linguaggio dei template di Django, puoi usare {% url [viewname] [args] %}
per generare un URL per una vista specifica con parametri.Come puoi fare lo stesso a livello di programmazione nel codice Python?
Ciò di cui ho bisogno è creare un elenco di voci di menu in cui ciascuna voce abbia nome, URL e un flag attivo (che si tratti della pagina corrente o meno).Questo perché sarà molto più semplice farlo in Python rispetto al linguaggio template.
Soluzione
Se hai bisogno di usare qualcosa di simile a {% url %}
template nel tuo codice, Django fornisce il tag django.core.urlresolvers.reverse()
.IL reverse
la funzione ha la seguente firma:
reverse(viewname, urlconf=None, args=None, kwargs=None)
Altri suggerimenti
Sto usando due approcci diversi nel mio models.py
.Il primo è il permalink
decoratore:
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)
Puoi anche chiamare reverse
direttamente:
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)])
Tieni presente che l'utilizzo reverse()
richiede che il modulo urlconf sia privo di errori al 100% e possa essere elaborato - iow no ViewDoesNotExist
errori o giù di lì, altrimenti ottieni il temuto NoReverseMatch
eccezione (gli errori nei modelli di solito falliscono silenziosamente con conseguente None
).