效果:
url.py
main-urls
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('book/',include('book.urls'))
]
app-> book.urls
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')
]
模型的創建
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)
添加數據:
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:
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)
模板中上一頁:
<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>