Πώς να δημιουργήσετε διευθύνσεις URL στο Django

ψήφοι
24

Στη γλώσσα πρότυπο Django, μπορείτε να χρησιμοποιήσετε {% url [viewname] [args] %}για να δημιουργήσετε μια διεύθυνση URL σε μια συγκεκριμένη άποψη με τις παραμέτρους. Πώς μπορείτε να κάποιου προγράμματος κάνει το ίδιο στον κώδικα Python;

Αυτό που χρειάζεται είναι να δημιουργήσετε μια λίστα των στοιχείων μενού, όπου κάθε στοιχείο έχει το όνομα, τη διεύθυνση URL και ενεργό σημαία (είτε είναι η τρέχουσα σελίδα ή όχι). Αυτό είναι επειδή θα είναι πολύ καθαρότερο για να γίνει αυτό στην Python από τη γλώσσα πρότυπο.

Δημοσιεύθηκε 04/09/2008 στις 06:36
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
34

Εάν πρέπει να χρησιμοποιήσετε κάτι παρόμοιο με την {% url %}ετικέτα πρότυπο στον κώδικά σας, Django προσφέρει το django.core.urlresolvers.reverse(). Η reverseσυνάρτηση έχει την ακόλουθη υπογραφή:

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

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

Απαντήθηκε 04/09/2008 στις 06:54
πηγή χρήστη

ψήφοι
8

Είμαι χρησιμοποιώντας δύο διαφορετικές προσεγγίσεις κατά τη γνώμη μου models.py. Ο πρώτος είναι ο permalinkδιακοσμητής:

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)

Μπορείτε επίσης να καλέσετε reverseάμεσα:

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)])
Απαντήθηκε 11/09/2008 στις 02:05
πηγή χρήστη

ψήφοι
4

Θα πρέπει να γνωρίζετε ότι η χρήση reverse()απαιτεί την ενότητα urlconf σας είναι 100% χωρίς λάθη και μπορεί να υποβάλλονται σε επεξεργασία - σιγά χωρίς ViewDoesNotExistλάθη ή έτσι, ή μπορείτε να πάρετε την επίφοβη NoReverseMatchεξαίρεση (λάθη σε πρότυπα που συνήθως αποτυγχάνουν σιωπηλά με αποτέλεσμα None).

Απαντήθηκε 16/09/2008 στις 12:36
πηγή χρήστη

ψήφοι
0

Για python3 και Dajango 2:

from django.urls import reverse

url = reverse('my_app:endpoint', kwargs={'arg1': arg_1})
Απαντήθηκε 22/07/2019 στις 20:15
πηγή χρήστη

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