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.

È stato utile?

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)

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

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top