【发布时间】:2016-01-27 15:42:34
【问题描述】:
我正在尝试对从标签返回的结果进行分页,但它无法正常工作。如果我有三个帖子,分页器将有三个结果页面,如果我有两个帖子,分页器将有两个结果页面。我有多少帖子这就是分页器将有多少页。如果我使用分页器从数据库返回正常结果,分页器就可以工作。我所做的是复制它并尝试修改它以适应标签分页。但它没有像我预期的那样工作。我还将分页放在一个包含文件中,试图保持干燥,但我不确定这是否是我的问题,这是我的代码。
分页.html:
<div class="text-center" style="margin-bottom: 20px">
<ul class="pagination">
{% if queryset.has_previous %}
<li><a href="?page=1"><<</a></li>
<li><a href="?{{ page_request_var }}={{ queryset.previous_page_number }}
{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">prev</a></li>
{% endif %}
{% for i in paginator.page_range %}
<li {% if page_obj.number == i %} class="active" {% endif %}><a href="?page={{i}}">{{i}}</a><li>
<!--Page {{ queryset.number }} of {{ queryset.paginator.num_pages }}.-->
{% endfor %}
{% if queryset.has_next %}
<li><a href="?{{ page_request_var }}={{ queryset.next_page_number }}
{% if request.GET.q %}&q={{ request.GET.q }}{% endif %}">next</a></li>
<li><a href="?page={{ queryset.paginator.num_pages }}">>></a></li>
{% endif %}
</ul>
这个分页不能按我想要的方式工作,views.py:
def tag_list(request, slug=None):
instance = get_object_or_404(Tag, slug=slug)
ins = instance.post_set.all()
query = request.GET.get("q")
if query:
ins = ins.filter(
Q(title__icontains=query) |
Q(content__icontains=query) |
Q(user__first_name__icontains=query) |
Q(user__last_name__icontains=query)
).distinct()
paginator = Paginator(ins, 1)
page_request_var = "page"
page = request.GET.get(page_request_var)
try:
queryset = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
queryset = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
queryset = paginator.page(paginator.num_pages)
context = {
"instance": ins,
"queryset": queryset,
"paginator": paginator,
}
return render(request, "posts/tag_list.html", context)
以下是我复制分页的地方。这个有效
def post_list(request):
today = timezone.now().date()
queryset_list = Post.objects.active()
if request.user.is_staff or request.user.is_superuser:
queryset_list = Post.objects.all()
query = request.GET.get("q")
if query:
queryset_list = queryset_list.filter(
Q(title__icontains=query) |
Q(content__icontains=query) |
Q(user__first_name__icontains=query) |
Q(user__last_name__icontains=query)
).distinct()
paginator = Paginator(queryset_list, 6) # Show 25 contacts per page
page_request_var = "page"
page = request.GET.get(page_request_var)
try:
queryset = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
queryset = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
queryset = paginator.page(paginator.num_pages)
context = {
"queryset": queryset,
"title": "Posts",
"page_request_var": page_request_var,
"today": today,
"queryset_list": queryset_list,
"paginator": paginator,
}
return render(request, "posts/post_list.html", context)
【问题讨论】:
-
什么不起作用?我不清楚实际问题是什么
-
@Sayse 标签分页。当我单击一个标签时,我希望将用户发送到 tags_list.html,它将显示具有相同标签的所有帖子。如果我每页只能显示四个并且有十六个结果,我希望在分页器中显示四个页面
标签: python django pagination