Βελτιώστε την αποτελεσματικότητα και την επεκτασιμότητα της εφαρμογής Django εφαρμόζοντας σελιδοποίηση. Εδώ είναι όλα όσα πρέπει να γνωρίζετε για να ξεκινήσετε.
Η σελιδοποίηση βελτιώνει την εμπειρία χρήστη και την απόδοση της εφαρμογής όταν αντιμετωπίζετε μεγάλα σύνολα δεδομένων. Χωρίς ένα σύστημα σελιδοποίησης, η εφαρμογή σας θα παρουσιάζει καθυστέρηση τις περισσότερες φορές. Με το Django, μπορείτε να αξιοποιήσετε την ενσωματωμένη υποστήριξη για σελιδοποίηση για τη σελιδοποίηση της εφαρμογής Ιστού σας.
Πώς λειτουργεί η σελιδοποίηση στο Django
Η εφαρμογή της σελιδοποίησης στο Django μπορεί να διαφέρει ανάλογα με το αν εργάζεστε με προβολές που βασίζονται σε τάξη ή σε λειτουργίες. Ανεξάρτητα από τη μέθοδο που προτιμάτε, οι βασικές αρχές παραμένουν οι ίδιες.
Το Django χρησιμοποιεί μια κλάση που ονομάζεται Σελιδοποιητής για την εφαρμογή σελιδοποίησης. ο Σελιδοποιητής class παρέχει διάφορες μεθόδους που μπορείτε να χρησιμοποιήσετε για να προσαρμόσετε τη σελιδοποίησή σας. Κατά την προετοιμασία του
Σελιδοποιητής κλάση, χρειάζεται δύο υποχρεωτικές παραμέτρους. τα δεδομένα για σελιδοποίηση και τον αριθμό των στοιχείων που θα εμφανίζονται ανά σελίδα. ο Σελιδοποιητής λαμβάνει μια τρίτη προαιρετική παράμετρο για τα ορφανά για να καθορίσει τον ελάχιστο αριθμό στοιχείων που πρέπει να παραμείνουν στην τελευταία σελίδα. Από προεπιλογή, η τιμή των ορφανών είναι 0 που σημαίνει ότι όλες οι σελίδες έχουν τον ίδιο αριθμό στοιχείων.Η διεύθυνση URL για μια σελιδοποιημένη σελίδα Django είναι παρόμοια με αυτήν: https://example.com/products/?page=3. ο σελίδα Η παράμετρος στη διεύθυνση URL λέει στο Django ποια σελίδα θέλει να δει ο χρήστης. Βοηθά επίσης τον Django να καθορίσει ποιο τμήμα των δεδομένων θα εμφανίσει για αυτήν τη σελίδα.
Ο κώδικας που χρησιμοποιείται σε αυτό το έργο είναι διαθέσιμος στο α Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.
Ρυθμίστε το έργο Django για σελιδοποίηση
Πριν σελιδοποιήσετε στο Django, πρέπει να το έχετε εγκαταστήσατε το Django και το εγκαταστήσατε στον υπολογιστή σας. Αφού ρυθμίσετε το Django στον υπολογιστή σας, θα πρέπει να δημιουργήσετε μια εφαρμογή και ένα μοντέλο για τα δεδομένα σας. Εδώ είναι ένα απλό μοντέλο που μπορείτε να αντιγράψετε:
από django.db εισαγωγή μοντέλα
τάξηΘέση(μοντέλα. Μοντέλο):
τίτλος = μοντέλα. CharField (max_length=255)
συγγραφέας = μοντέλα. CharField (max_length=50)
περιεχόμενο = μοντέλα. Πεδίο κειμένου("Δημοσίευση περιεχομένου")
def__str__(εαυτός):
ΕΠΙΣΤΡΟΦΗ αυτο.τίτλος
Το παραπάνω μοντέλο προορίζεται για εφαρμογή ιστολογίου. Καθορίζει τον τίτλο, τον συγγραφέα και τα πεδία περιεχομένου για κάθε ανάρτηση ιστολογίου. Έχει επίσης μια μέθοδο που επιστρέφει τον τίτλο της ανάρτησης για καλύτερη εμπειρία χρήστη στον πίνακα διαχείρισης.
Μετακινήστε το μοντέλο σας εκτελώντας αυτήν την εντολή:
python manager.py makemigrations && python manager.py migrate
Μετά τη μετεγκατάσταση του μοντέλου σας, θα πρέπει να πλοηγηθείτε στο blog>admin.py για να το καταχωρήσετε. Ο παρακάτω κώδικας καταχωρεί με επιτυχία ένα μοντέλο που ονομάζεται Θέση.
από django.συνεισφορά εισαγωγή διαχειριστής
από .μοντέλα εισαγωγή Θέση # αντικαταστήστε το 'Post' με το όνομα του μοντέλου σας
admin.site.register (Ανάρτηση)
Στη συνέχεια, δημιουργήστε έναν υπερχρήστη και προσθέστε δημοσιεύσεις στον πίνακα διαχείρισης του Django. Για να δημιουργήσετε έναν υπερχρήστη, χρησιμοποιήστε αυτήν την εντολή:
python management.py createsuperuser
Η παραπάνω εντολή θα σας οδηγήσει στη διαδικασία που φαίνεται στην παρακάτω εικόνα:
Αφού δημιουργήσετε έναν υπερχρήστη, εκτελέστε τον διακομιστή ανάπτυξης και μεταβείτε στον πίνακα διαχείρισης.
python manager.py runserver
Μόλις ξεκινήσει ο διακομιστής σας, μεταβείτε στο http://127.0.0.1:8000/admin, συνδεθείτε και προσθέστε μερικές αναρτήσεις.
Στη συνέχεια, δημιουργήστε ένα πρότυπο HTML για να αποδώσετε τις αναρτήσεις σας στο πρόγραμμα περιήγησης. Δημιουργήστε το αρχείο σας στον παρακάτω κατάλογο: your_app/templates/your_app_name/index.html. Εάν δεν καταλαβαίνετε πώς να δημιουργείτε πρότυπα, διαβάστε μας εισαγωγικός οδηγός για την αρχιτεκτονική MVT του Django.
Σελιδοποίηση Django σε προβολή βασισμένη σε λειτουργίες
Το Django σάς επιτρέπει να δημιουργείτε εφαρμογές είτε με προβολές που βασίζονται σε τάξη είτε με προβολές βασισμένες σε λειτουργίες. Για να σελιδοποιήσετε την εφαρμογή σας χρησιμοποιώντας μια προβολή που βασίζεται σε λειτουργίες. Ακολουθήστε αυτά τα βήματα:
- Ανοιξε το δικό σου views.py αρχείο και εισαγωγή του Σελιδοποιητής τάξη.
από django.core.paginator εισαγωγή Σελιδοποιητής
- Δημιουργήστε μια συνάρτηση προβολής για την απόδοση αναρτήσεων στο πρότυπο HTML σας.
από django.συντομεύσεις εισαγωγή καθιστώ
από .μοντέλα εισαγωγή Θέση
από django.core.paginator εισαγωγή Σελιδοποιητής
defπροβολή λίστας(αίτηση):
posts = Post.objects.all()
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'blog/blog_list_view.html', {"αναρτήσεις":posts})
- Δημιουργήστε ένα μοτίβο διεύθυνσης URL για να εμφανίζονται οι αναρτήσεις σας στο πρόγραμμα περιήγησης. Ξεκινήστε διαμορφώνοντας το μοτίβο διεύθυνσης URL στον κατάλογο του έργου σας. Ανοιξε το urls.py αρχείο σε επίπεδο έργου και προσθέστε το στο urlpatterns:
από django.urls εισαγωγή περιλαμβάνω
urlpatterns = [
...,
μονοπάτι('', περιλαμβάνω('blog.urls')),
]
Στο παραπάνω απόσπασμα κώδικα, αντικαταστήστε blog με το όνομα της εφαρμογής σας. Εάν δεν μπορείτε να κάνετε διάκριση μεταξύ ενός έργου και μιας εφαρμογής, θα πρέπει να το γνωρίζετε πώς διαφέρει ένα έργο από μια εφαρμογή στο Django.
Αφού κάνετε την παραπάνω διαμόρφωση, δημιουργήστε ένα urls.py αρχείο στον κατάλογο της εφαρμογής σας (σε αυτήν την περίπτωση, είναι το blog φάκελο) και προσθέστε αυτό το απόσπασμα κώδικα:
από django.urls εισαγωγή μονοπάτι
από .προβολές εισαγωγή προβολή λίστας
urlpatterns = [
μονοπάτι('', list_view, name='προβολή λίστας'),
]
Όταν εκτελείτε τον διακομιστή σας και πλοηγείστε σε http://127.0.0.1:8000/, το πρόγραμμα περιήγησης θα εμφανίσει τις αναρτήσεις σας σύμφωνα με το φύλλο στυλ που έχετε καθορίσει.
- Τροποποιήστε τη λειτουργία προβολής για να προσθέσετε λογική σελιδοποίησης. Εδώ είναι ένα παράδειγμα:
defπροβολή λίστας(αίτηση):
posts = Post.objects.all()
σελιδοποιημένος = Paginator (αναρτήσεις, 3)
page_number = αίτημα. GET.get('σελίδα') #Λάβετε τον αριθμό της σελίδας που ζητήσατε από τη διεύθυνση URL
page = paginated.get_page (page_number)
ΕΠΙΣΤΡΟΦΗ απόδοση (αίτημα, 'blog/blog_list_view.html', {'σελίδα':σελίδα})
Το παραπάνω απόσπασμα κώδικα εισάγει τρεις νέες μεταβλητές: σελιδοποιημένος, αριθμός σελίδας, και σελίδα. Κάθε μεταβλητή κάνει τα εξής:
- ο σελιδοποιημένος μεταβλητή αρχικοποίησε το Σελιδοποιητής τάξη. Σε αυτό το σενάριο, τα δεδομένα που θα σελιδοποιηθούν είναι το σύνολο ερωτημάτων, αναρτήσεις, και παίρνει 3 ως τον αριθμό των στοιχείων που θα εμφανίζονται ανά σελίδα.
- ο αριθμός σελίδας Η μεταβλητή λαμβάνει τον αριθμό σελίδας από τη διεύθυνση URL. Για παράδειγμα, σε http://127.0.0.1:8000/?page=2, ο αριθμός σελίδας είναι 2.
- ο σελίδα Η μεταβλητή ανακτά τη συγκεκριμένη σελίδα για απόδοση από το σελιδοποιημένος μεταβλητός.
Μέχρι τώρα, ο Django πρέπει να έχει σελιδοποιήσει τη σελίδα σας. Μπορείτε να πλοηγηθείτε σε συγκεκριμένες σελιδοποιημένες σελίδες χρησιμοποιώντας τη μορφή URL που εμφανίζεται σε αυτήν την εικόνα:
- Τροποποιήστε το πρότυπο HTML για να εμφανίσετε την πλοήγηση για σελιδοποιημένες σελίδες. Χρησιμοποιώντας μεθόδους που είναι διαθέσιμες στο Σελιδοποιητής class σάς δίνει τη δυνατότητα να δημιουργήσετε απλή πλοήγηση στη σελίδα σας. Ακολουθεί ένα παράδειγμα που μπορείτε να προσθέσετε κάτω από τον αρχικό σας κώδικα HTML:
{% if page.has_previous %}
<έναhref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Προηγούμενοένα>
{% τέλος εαν %}<έναhref="?page=1"τάξη="btn btn-secondary">Πρώταένα>
{% για num in page.paginator.page_range %}
{% if num == page.number %}
<σπιθαμή>{{ αριθμός }}σπιθαμή>
{% other %}
<έναhref="?page={{num}}"τάξη="btn btn-secondary mx-2">
{{ αριθμός }}
ένα>
{% τέλος εαν %}
{% τέλος για %}<έναhref="?page={{page.paginator.num_pages}}"τάξη="btn btn-secondary mx-2">
τελευταίος
ένα>
{% if page.has_next %}
<έναhref="?page={{page.next_page_number}}"τάξη="btn btn-secondary mx-2">
Επόμενο
ένα>
{% τέλος εαν %}
Στο παραπάνω απόσπασμα κώδικα, οι ακόλουθες μέθοδοι χρησιμοποιούνται σε συνδυασμό με δηλώσεις υπό όρους για να καθοριστεί πώς θα μοιάζει η πλοήγηση σελιδοποίησης:
- έχει_προηγούμενο: Αυτή η μέθοδος επιστρέφει Αληθής εάν υπάρχει προηγούμενη σελίδα στα σελιδοποιημένα δεδομένα.
- previous_page_number: Αυτή η μέθοδος επιστρέφει την τιμή της προηγούμενης σελίδας.
- Εύρος των σελίδων: Αυτή η μέθοδος σάς ενημερώνει πόσες σελίδες έχετε στα σελιδοποιημένα δεδομένα σας.
- αριθμός: Αυτή η μέθοδος επιστρέφει την τιμή της τρέχουσας σελίδας.
- αριθμός_σελίδων: Αυτή η μέθοδος επιστρέφει τον συνολικό αριθμό σελίδων.
- έχει_επόμενο: Αυτή η συνάρτηση επιστρέφει Αληθής εάν υπάρχει επόμενη σελίδα στα σελιδοποιημένα δεδομένα.
- next_page_number: Αυτή η μέθοδος επιστρέφει την τιμή της επόμενης σελίδας.
Σελιδοποίηση Django σε προβολή βασισμένη στην τάξη
Σε μια προβολή που βασίζεται σε κλάση, δεν χρειάζεται να εισαγάγετε και να αρχικοποιήσετε το Σελιδοποιητής τάξη. Για να εφαρμόσετε τη σελιδοποίηση σε μια προβολή που βασίζεται σε κλάση, θα πρέπει να καθορίσετε ένα χαρακτηριστικό που ονομάζεται σελίδα_από. Ακολουθήστε αυτά τα βήματα για να σελιδοποιήσετε την εφαρμογή σας με προβολή που βασίζεται σε τάξη:
- Γράψτε μια προβολή βάσει κλάσης και καθορίστε το σελίδα_από Χαρακτηριστικό. Εδώ είναι ένα απλό παράδειγμα:
από .μοντέλα εισαγωγή Θέση
από django.views.generic εισαγωγή Προβολή λίστας
τάξηPostListView(Προβολή λίστας):
μοντέλο = Post
όνομα_προτύπου = 'blog/blog_list_view.html'
context_object_name = 'σελίδα'
paginate_by = 2
Η παραπάνω προβολή είναι η βασισμένη σε κλάση έκδοση της προβολής που βασίζεται σε συνάρτηση που γράφτηκε νωρίτερα. Αυτή η άποψη κληρονομεί την άποψη του Django Προβολή λίστας τάξη, που χρησιμοποιείται για την καταχώριση στοιχείων. Ορίζει τη λογική του με ιδιότητες όπως μοντέλο, όνομα_προτύπου, context_object_name, και σελίδα_από. ο σελίδα_από Το χαρακτηριστικό καθορίζει πόσες αναρτήσεις θα εμφανίζονται ανά σελίδα. σε αυτήν την περίπτωση, 2 δημοσιεύσεις.
- Μόλις δημιουργήσετε την προβολή σας, τροποποιήστε τη δική σας urls.py αρχείο για να το χρησιμοποιήσετε. Εδώ είναι ένα απλό παράδειγμα:
από .προβολές εισαγωγή PostListView
urlpatterns = [
μονοπάτι('', PostListView.as_view(), name='προβολή λίστας'),
]
- Τροποποιήστε το πρότυπο HTML για χρήση page_obj για τη σελιδοποίηση.
{% if page_obj.has_previous %}
<έναhref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Προηγούμενοένα>
{% τέλος εαν %}<έναhref="?page=1"τάξη="btn btn-secondary">Πρώταένα>
{% για num in page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<σπιθαμήτάξη="τρέχουσα σελίδα">{{ αριθμός }}σπιθαμή>
{% other %}
<έναhref="?page={{num}}"τάξη="btn btn-secondary mx-2">
{{ αριθμός }}
ένα>
{% τέλος εαν %}
{% τέλος για %}<έναhref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
τελευταίος
ένα>
{% if page.has_next %}
<έναhref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
Επόμενο
ένα>
{% τέλος εαν %}
Σε αντίθεση με το πρότυπο HTML για την προβολή που βασίζεται σε συναρτήσεις, αυτό το πρότυπο χρησιμοποιεί page_obj αντί σελίδα για την αναπαράσταση του αντικειμένου της σελίδας. Αυτή είναι η προεπιλεγμένη συμπεριφορά για σελιδοποίηση βάσει κλάσεων στο Django.
Χρησιμοποιήστε τη σελιδοποίηση για να κάνετε την εφαρμογή σας επεκτάσιμη
Η σελιδοποίηση μειώνει το φόρτο στον διακομιστή/βάση δεδομένων σας με την ανάκτηση και την εμφάνιση μικρότερων υποσυνόλων δεδομένων κάθε φορά. Με τη σελιδοποίηση, η απόδοση των ιστοσελίδων σας θα αυξηθεί. Οι χρήστες σας θα έχουν επίσης μια καλή εμπειρία όταν χρησιμοποιούν την εφαρμογή σας.
Οι προβολές που βασίζονται σε τάξη εξοικονομούν περισσότερο χρόνο και κώδικα σε σύγκριση με τις προβολές που βασίζονται σε συναρτήσεις, αλλά μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις δύο, ανάλογα με τις προτιμήσεις και τις προδιαγραφές του έργου σας.