为什么即使在应用分页后我的页面仍显示所有博客条目
Why does my page display all blog entries even after applying pagination
请帮忙。
我正在使用 pycharm 和 django 进行编程。
我在应用程序的页面中显示博客条目。
即使在将视图设置为每页显示 2 个条目后,所有条目仍保持显示。
您认为错误来自哪里?
我不确定它与模板渲染有关还是与
分页逻辑?
Views.py - 这是博客显示的完整视图。
def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()
blog_post = Blog_Post_Model.objects.filter(status=1)
blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None
page = request.GET.get('page', 1)
paginator = Paginator(blog_post,2)
try:
blog_page = paginator.page(page)
except PageNotAnInteger:
blog_page = paginator.page(1)
except EmptyPage:
blog_page = paginator.page(paginator.num_pages)
if request.method == 'POST':
newsletter_form = NewsLetterForm(data=request.POST)
if newsletter_form.is_valid():
new_member = newsletter_form.save()
new_member.save()
else:
newsletter_form = NewsLetterForm()
context = {
'profile': profile,
'blog_post': blog_post,
'services': our_services,
'categories': blog_post_cat,
'tags': tags,
'newsletter': newsletter_form,
'new_member': new_member,
'blog':blog_page,
'page':page,
}
return render(request, 'webpages/blog.html', context=context)
Blog.html(博客条目) - 这里我显示了博客条目
<div class="col-lg-8 entries">
{% for post in blog_post %}
<article class="entry" data-aos="fade-up">
<div class="entry-img">
<img src="{{post.image.url }}" alt="" class="img-fluid">
</div>
<h2 class="entry-title">
<a href="{% url 'webpages:articles_detail' post.pk %}">{{post.title}}</a>
</h2>
<div class="entry-meta">
<ul>
<li class="d-flex align-items-center"><i class="icofont-user"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">{{post.author}}</a></li>
<li class="d-flex align-items-center"><i class="icofont-wall-clock"></i> <a href="{% url 'webpages:articles_detail' post.pk %}"><time datetime="2020-01-01">{{post.created_on | date:"Y-m-d"}}</time></a></li>
<li class="d-flex align-items-center"><i class="icofont-comment"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">12 Comments</a></li>
</ul>
</div>
<div class="entry-content">
<p>
{{post.body | safe | linebreaks | truncatewords:20 }}
</p>
<div class="read-more">
<a href="{% url 'webpages:articles_detail' post.pk %}">Read More</a>
</div>
</div>
</article><!-- End blog entry -->
{% endfor %}
Blog.html(分页)
<div class="blog-pagination">
{% if blog.has_other_pages %}
<ul class="justify-content-center">
{% if blog.has_previous %}
<li><a href="?page={{ blog.previous_page_number }}"><i class="icofont-rounded-left"></i></a></li>
{% else %}
<li class="disabled"><i class="icofont-rounded-left"></i></li>
{% endif %}
{% for i in blog.paginator.page_range %}
{% if blog.number == i %}
<li class="active"><a href="">{{ i }}</a></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if blog.has_next %}
<li><a href="?page={{ blog.next_page_number }}"><i class="icofont-rounded-right"></i></a></li></a></li>
{% else %}
<li class="disabled"><i class="icofont-rounded-right"></i></a></li></li>
{% endif %}
</ul>
{% endif %}
blog_post
仍然是包含所有 Blog_Post_Model
对象的查询集,您需要遍历 Page
对象,而不是查询集,例如:
{% for post in <b>blog</b> %}
<!-- … -->
{% endfor %}
而不是:
{% for post in <s>blog_post</s> %}
<!-- … -->
{% endfor %}
查询集(或多或少)是不可变的,所以分页器不会改变查询集,它会在Page
对象。
试试这个:
def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()
blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None
blog_post = Blog_Post_Model.objects.filter(status=1)
paginator = Paginator(blog_post,2)
page = request.GET.get('page', 1)
try:
blog_page = paginator.get_page(page)
except PageNotAnInteger:
blog_page = paginator.get_page(1)
except EmptyPage:
blog_page = paginator.get_page(paginator.num_pages)
if request.method == 'POST':
newsletter_form = NewsLetterForm(data=request.POST)
if newsletter_form.is_valid():
new_member = newsletter_form.save()
new_member.save()
else:
newsletter_form = NewsLetterForm()
context = {
'profile': profile,
'blog_post': blog_post,
'services': our_services,
'categories': blog_post_cat,
'tags': tags,
'newsletter': newsletter_form,
'new_member': new_member,
'blog':blog_page,
'page':page,
}
return render(request, 'webpages/blog.html', context=context)
模板:
{% for post in blog %}
<!-- … -->
{% endfor %}
请帮忙。
我正在使用 pycharm 和 django 进行编程。
我在应用程序的页面中显示博客条目。
即使在将视图设置为每页显示 2 个条目后,所有条目仍保持显示。
您认为错误来自哪里?
我不确定它与模板渲染有关还是与
分页逻辑?
Views.py - 这是博客显示的完整视图。
def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()
blog_post = Blog_Post_Model.objects.filter(status=1)
blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None
page = request.GET.get('page', 1)
paginator = Paginator(blog_post,2)
try:
blog_page = paginator.page(page)
except PageNotAnInteger:
blog_page = paginator.page(1)
except EmptyPage:
blog_page = paginator.page(paginator.num_pages)
if request.method == 'POST':
newsletter_form = NewsLetterForm(data=request.POST)
if newsletter_form.is_valid():
new_member = newsletter_form.save()
new_member.save()
else:
newsletter_form = NewsLetterForm()
context = {
'profile': profile,
'blog_post': blog_post,
'services': our_services,
'categories': blog_post_cat,
'tags': tags,
'newsletter': newsletter_form,
'new_member': new_member,
'blog':blog_page,
'page':page,
}
return render(request, 'webpages/blog.html', context=context)
Blog.html(博客条目) - 这里我显示了博客条目
<div class="col-lg-8 entries">
{% for post in blog_post %}
<article class="entry" data-aos="fade-up">
<div class="entry-img">
<img src="{{post.image.url }}" alt="" class="img-fluid">
</div>
<h2 class="entry-title">
<a href="{% url 'webpages:articles_detail' post.pk %}">{{post.title}}</a>
</h2>
<div class="entry-meta">
<ul>
<li class="d-flex align-items-center"><i class="icofont-user"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">{{post.author}}</a></li>
<li class="d-flex align-items-center"><i class="icofont-wall-clock"></i> <a href="{% url 'webpages:articles_detail' post.pk %}"><time datetime="2020-01-01">{{post.created_on | date:"Y-m-d"}}</time></a></li>
<li class="d-flex align-items-center"><i class="icofont-comment"></i> <a href="{% url 'webpages:articles_detail' post.pk %}">12 Comments</a></li>
</ul>
</div>
<div class="entry-content">
<p>
{{post.body | safe | linebreaks | truncatewords:20 }}
</p>
<div class="read-more">
<a href="{% url 'webpages:articles_detail' post.pk %}">Read More</a>
</div>
</div>
</article><!-- End blog entry -->
{% endfor %}
Blog.html(分页)
<div class="blog-pagination">
{% if blog.has_other_pages %}
<ul class="justify-content-center">
{% if blog.has_previous %}
<li><a href="?page={{ blog.previous_page_number }}"><i class="icofont-rounded-left"></i></a></li>
{% else %}
<li class="disabled"><i class="icofont-rounded-left"></i></li>
{% endif %}
{% for i in blog.paginator.page_range %}
{% if blog.number == i %}
<li class="active"><a href="">{{ i }}</a></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if blog.has_next %}
<li><a href="?page={{ blog.next_page_number }}"><i class="icofont-rounded-right"></i></a></li></a></li>
{% else %}
<li class="disabled"><i class="icofont-rounded-right"></i></a></li></li>
{% endif %}
</ul>
{% endif %}
blog_post
仍然是包含所有 Blog_Post_Model
对象的查询集,您需要遍历 Page
对象,而不是查询集,例如:
{% for post in <b>blog</b> %} <!-- … --> {% endfor %}
而不是:
{% for post in <s>blog_post</s> %} <!-- … --> {% endfor %}
查询集(或多或少)是不可变的,所以分页器不会改变查询集,它会在Page
对象。
试试这个:
def blog(request):
profile = About_Us_Model.objects.all()
our_services = Services_Model.objects.all()
blog_post_cat = Blog_Category_Model.objects.all()
tags = Blog_Post_Model.tags.all
newsletter_form = NewsLetterForm()
new_member = None
blog_post = Blog_Post_Model.objects.filter(status=1)
paginator = Paginator(blog_post,2)
page = request.GET.get('page', 1)
try:
blog_page = paginator.get_page(page)
except PageNotAnInteger:
blog_page = paginator.get_page(1)
except EmptyPage:
blog_page = paginator.get_page(paginator.num_pages)
if request.method == 'POST':
newsletter_form = NewsLetterForm(data=request.POST)
if newsletter_form.is_valid():
new_member = newsletter_form.save()
new_member.save()
else:
newsletter_form = NewsLetterForm()
context = {
'profile': profile,
'blog_post': blog_post,
'services': our_services,
'categories': blog_post_cat,
'tags': tags,
'newsletter': newsletter_form,
'new_member': new_member,
'blog':blog_page,
'page':page,
}
return render(request, 'webpages/blog.html', context=context)
模板:
{% for post in blog %}
<!-- … -->
{% endfor %}