分页器不在主页显示
当我打开主页时,分页器没有显示出来。我无法解决这个问题。
我尝试了这些代码,但还是没法解决这个问题。请帮我解决这个问题。
views.py中的代码
from django.core.paginator import Paginator, EmptyPage, InvalidPage
def home(request, c_slug=None):
c_page = None
prodt = None
if c_slug != None:
c_page = get_object_or_404(Categ, slug=c_slug)
prodt = Products.objects.filter(category=c_page, available=True)
else:
prodt = Products.objects.all().filter(available=True)
cat = Categ.objects.all()
paginator = Paginator(prodt, 4)
try:
page = int(request.GET.get('page', '1'))
except:
page = 1
try:
products = paginator.page(page)
except (EmptyPage, InvalidPage):
products = paginator.page(paginator.num_pages)
return render(request, 'index.html', {'ct': cat, 'pr': products})
Index.html中的代码
<div class="row flex px-xl-5">
{% for i in pr.object_list %}
<div class="col-lg-3 col-md-4 col-sm-6">
<div class="product-item bg-light mb-4">
<div class="product-img position-relative overflow-hidden">
<a href="{{i.get_url}}"><img class="img-fluid w-100" src="{{i.img.url}}" alt="" style="height:250px; width:500px;">
</a>
</div>
<div class="text-center py-4">
<a class="h6 text-decoration-none text-truncate" href="{{i.get_url}}">{{i.name}}</a>
<p>{{i.des|truncatechars:80}}</p>
<div class="d-flex align-items-center justify-content-center mt-2">
<h5>RS {{i.price}}</h5><h6 class="text-muted ml-2"><del>RS 123.00</del></h6>
</div>
<p>Stocks left: {{i.stock}}</p>
<div class="d-flex align-items-center justify-content-center mb-1">
<small class="fa fa-star text-primary mr-1"></small>
<small class="fa fa-star text-primary mr-1"></small>
<small class="fa fa-star text-primary mr-1"></small>
<small class="fa fa-star text-primary mr-1"></small>
<small class="fa fa-star text-primary mr-1"></small>
<small>(99)</small>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="mx-auto">
<div class="text-center">
{% for pg in products.paginator.page_range %}
<a href="?page={{pg}}" class="btn btn-light btn-sm {% if products.number == pg %} activate {% endif %}">{{pg}}</a>
{% endfor %}
</div>
</div>
</div>
当我打开主页时,分页器没有显示出来。我无法解决这个问题。
我尝试了这些代码,但还是没法解决这个问题。请帮我解决这个问题。
<div class="mx-auto">
<div class="text-center">
{% for pg in products.paginator.page_range %}
<a href="?page={{pg}}" class="btn btn-light btn-sm {% if products.number == pg %} activate {% endif %}">{{pg}}</a>
{% endfor %}
</div>
</div>
这些是我在for循环结束后输入的代码。
我该怎么做才能解决这个错误?
1 个回答
1
在这里,我们讨论的是 Template.render()
[django-docs] 方法可以使用的内容。你可以看到,使用的是 Context({'pr': products})
[django-docs],具体内容在这里:
render(request, 'index.html', {'ct': cat, 'pr': products})
因此,指向 Paginator products
的 Context
变量是 pr
。这个变量就是你在模板中遍历 Paginator products
时需要使用的。
<div class="text-center">
{% for pg in pr.paginator.page_range %}
<a href="?page={{pg}}" class="btn btn-light btn-sm {% if pr.number == pg %} activate {% endif %}">{{pg}}</a >
{% endfor %}
</div>
顺便说一下,你的变量命名有点奇怪。你需要改进这一点,这样你的代码才会更容易阅读。