django-admin startproject ProjectName
首先,需要將目錄更改為已創建的項目,然後需要創建一個App,我將其稱為MyApp。python manage.py startapp MyApp另外,還需要在settings.py(INSTALLED_APPS)中添加新創建的應用。INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'MyApp']另外,還需要創建一個模板文件夾,因為我們需要向模板文件夾中添加一些html文件,請確保在創建模板文件夾後需要打開settings.py並將模板目錄添加到DIRS部分中,如下所示。TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['templates'],1:基於函數的視圖中的分頁
現在,首先,需要在應用程式中打開models.py文件並創建模型。from django.db import modelsfrom django.utils import timezone
class Post(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) body = models.TextField() publish = models.DateTimeField(default=timezone.now())
def __str__(self): return self.title基本上,我們有一個具有四個沒有id的欄位的模型。之後,需要進行這樣的遷移。python manage.py makemigrationspython manage.py migrate首先,需要打開views.py文件並創建視圖功能。from django.shortcuts import renderfrom .models import Postfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdef Index(request): post_list = Post.objects.all() paginator = Paginator(post_list, 2) page = request.GET.get('page')
try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1)
except EmptyPage: posts = paginator.page(paginator.num_pages)
return render(request, 'index.html', {'page':page,'posts':posts})可以看到我們已經在索引視圖功能中完成了分頁確定,現在需要在創建的應用程式中創建一個新的urls.py。並連結您的視圖功能,像這樣:from django.urls import pathfrom .views import Index
urlpatterns = [ path('', Index),]而且還需要像這樣在主項目urls.py中包含應用程式urls.pyfrom django.contrib import adminfrom django.urls import path, include
urlpatterns = [ path('admin/', admin.site.urls), path('', include('MyApp.urls'))]現在,在的模板文件夾中,需要創建兩個這樣的html文件。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"></head><body>
<div class = "jumbotron"> {% for post in posts %}
<h1 class="display-4">{{post.title}}</h1> Published {{post.publish}} by {{post.author}}
{{post.body|truncatewords:30|linebreaks}}
<hr class="my-4">
{% endfor %}
</div>
{% include "pagination.html" with page=posts %}
</body></html>所以這是我們的索引html文件,也可以在頂部看到我添加了Bootstrap CDN連結,因為我將使用一些bootstrap樣式進行分頁。該代碼用於包含我們尚未創建的分頁文件。{% include "pagination.html" with page=posts %}由於我們傳遞給模板的Page對象稱為帖子,因此我們將分頁模板包括在帖子列表模板中,並傳遞參數以正確呈現它。可以按照此方法在不同模型的分頁視圖中重用分頁模板。
現在,這是我們的pagination.html文件。<nav aria-label="Page navigation example" >
<ul class="pagination">
<li class="page-item">
{% if page.has_previous %} <a class="page-link" href="?page={{page.previous_page_number}}">Previous</a>
{% endif %}
</li>
<li class="page-item">
<a class="page-link">Page {{page.number}} of {{page.paginator.num_pages}}</a>
</li>
<li class="page-item">
{% if page.has_next %} <a class="page-link" href="?page={{page.next_page_number}}">Next</a>
{% endif %}
</li>
</ul>
</nav>python manage.py runserver2:基於類的視圖分頁
因此,對於基於類的視圖分頁,我們需要像這樣在views.py文件中進行一些更改。from django.shortcuts import renderfrom .models import Postfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerfrom django.views.generic import ListView
'''def Index(request): post_list = Post.objects.all() paginator = Paginator(post_list, 2) page = request.GET.get('page')
try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1)
except EmptyPage: posts = paginator.page(paginator.num_pages)
return render(request, 'index.html', {'page':page,'posts':posts})
'''
class PostList(ListView): queryset = Post.objects.all() context_object_name = 'posts' paginate_by = 2 template_name = 'index.html'django.views.generic.list.ListView提供了一種內置的方法來對顯示的列表進行分頁。可以通過在視圖類中添加paginate_by屬性來實現此目的,這會限制每頁的對象數,並向上下文中添加paginator和page_obj。要允許用戶在頁面之間導航,請在模板中添加指向下一頁和上一頁的連結。
現在,在此之後,需要打開urls.py並注釋上一個視圖,並添加基於類的視圖from django.urls import pathfrom .views import PostList
urlpatterns = [ #path('', Index), path('', PostList.as_view())
]可以在頂部看到我們已經導入了PostList,為了保持分頁功能,我們必須使用正確的頁面。傳遞給模板的對象。Django的ListView通用視圖將所選頁面傳遞到名為page_obj的變量中,因此必須相應地編輯index.html模板,以使用正確的變量包括分頁器,如下所示:{% include 'pagination.html' with page=page_obj %}因此,如果運行項目,結果跟上面截圖是一樣的。
完畢,希望這篇對大家學習有幫助。