效果:
url.pyhtml
main-urlspython
from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('book/',include('book.urls')) ]
app-> book.urlsdjango
from django.urls import path from . import views app_name = 'book' urlpatterns = [ path('add/',views.add_article,name='add_article'), path('list/',views.ArticleListView.as_view(),name='article_list') ]
模型的建立app
from django.db import models class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() create_time = models.DateTimeField(auto_now_add=True)
添加數據:url
def add_article(request): articles = [] for x in range(100): article = Article(title='標題 %s'%x,content = "內容 %s"%x) articles.append(article) Article.objects.bulk_create(articles) #一次性插入。傳遞一個列表 return HttpResponse('添加成功')
context:3d
def get_context_data(self, **kwargs): context = super(ArticleListView, self).get_context_data(**kwargs) print(context) #context['xxx'] = 'xxx' #添加額外的鍵值對,傳到模板中 return context {'paginator': <django.core.paginator.Paginator object at 0x0415D310>, 'page_obj': <Page 3 of 10>, 'is_paginated': True, 'object_list': <QuerySet [<Article: Article object (21)>, <Article: Article object (22)>, <Article: Article object (23)>, <Article: Article object (24)>, <Article: Article object (25)>, <Article: Article obje ct (26)>, <Article: Article object (27)>, <Article: Article object (28)>, <Article: Article object (29)>, <Article: Article object (30)>]>, 'articles': <QuerySet [< Article: Article object (21)>, <Article: Article object (22)>, <Article: Article object (23)>, <Article: Article object (24)>, <Article: Article object (25)>, <Arti cle: Article object (26)>, <Article: Article object (27)>, <Article: Article object (28)>, <Article: Article object (29)>, <Article: Article object (30)>]>, 'view': <book.views.ArticleListView object at 0x0407BCB0>} 字段說明: """ paginator: 分頁 page_obj:當前這一頁參數 is_paginated: True object_list: 對象名字 view:視圖名字 """ """ Paginator經常使用屬性和方法: count:總共有多少條數據。 num_pages:總共有多少頁。 page_range:頁面的區間。好比有三頁,那麼就range(1,4)。 Page經常使用屬性和方法: has_next:是否還有下一頁。 has_previous:是否還有上一頁。 next_page_number:下一頁的頁碼。 previous_page_number:上一頁的頁碼。 number:當前頁。 start_index:當前這一頁的第一條數據的索引值。 end_index:當前這一頁的最後一條數據的索引值。 """ # def get_queryset(self): #例如用戶數據的過濾。例如在生產環境中,對刪除帖子而實際上還存在表中的數據過濾掉 # return Article.objects.all() #默認返回所有 # return Article.objects.filter(id__lte=9)
模板中上一頁:code
<nav aria-label="Page navigation"> <ul> {% for article in articles %} <li> {{article.title}} </li> {% endfor %} </ul> <ul class="pagination"> <!--#上一頁--> <!--當有上一頁時--> {% if page_obj.has_previous %} <li><a href="{% url 'book:article_list' %}?page={{ page_obj.previous_page_number }}">上一頁</a></li> {% else %} <li class="disabled"><a href="#">上一頁</a></li> {% endif %} <!--中間的頁碼,若是是當前頁,添加active屬性--> {% for page in paginator.page_range %} {% if page == page_obj.number %} <li class="active"> <a href="{% url 'book:article_list' %}?page={{ page }}">{{ page }}</a> </li> {% else %} <li><a href="{% url 'book:article_list' %}?page={{ page }}">{{ page }}</a></li> {% endif %} {% endfor %} <!--#下一頁--> {% if page_obj.has_next %} <li><a href="{% url 'book:article_list' %}?page={{ page_obj.next_page_number }}">下一頁</a></li> {% else %} <li class="disabled"><a href="x">下一頁</a></li> {% endif %} </ul> </nav>