Hvordan å generere webadresser i django

stemmer
25

I Django mal språk, kan du bruke {% url [viewname] [args] %}til å generere en URL til en bestemt visning med parametere. Hvordan kan du auto gjøre det samme i Python-koden?

Det jeg trenger er å lage en liste over menyelementer hvor hvert element har navn, URL, og en aktiv flagg (enten det er gjeldende side eller ikke). Dette er fordi det vil være mye renere å gjøre dette i Python enn malen språk.

Publisert på 04/09/2008 klokken 07:36
kilden bruker
På andre språk...                            


4 svar

stemmer
34

Hvis du trenger å bruke noe som ligner på den {% url %}malen koden i koden din, gir Django den django.core.urlresolvers.reverse(). Den reversefunksjonen har følgende signatur:

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

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

Svarte 04/09/2008 kl. 07:54
kilden bruker

stemmer
8

Jeg bruker to ulike tilnærminger i min models.py. Den første er permalinkdekoratør:

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)

Du kan også ringe reversedirekte:

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)])
Svarte 11/09/2008 kl. 03:05
kilden bruker

stemmer
4

Vær oppmerksom på at bruk reverse()krever at urlconf modulen er 100% feilfritt og kan behandles - IOW ingen ViewDoesNotExistfeil eller så, eller du får den fryktede NoReverseMatchunntak (feil i maler vanligvis mislykkes stille resulterer i None).

Svarte 16/09/2008 kl. 13:36
kilden bruker

stemmer
0

For Python3 og Dajango 2:

from django.urls import reverse

url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})
Svarte 22/07/2019 kl. 21:15
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more