我从官方django文档中引用了分页代码。我没有收到任何错误,但所有对象都显示在同一页面中。我在视图中有十个对象,我给了5个对象(带有详细信息的书籍图像)显示在每个页面中,但所有10个对象都显示在第1页和第2页中。
views.py,
def add_prod(request):
form = ProdForm(request.POST or None,request.FILES or None)
my_products_list = Add_prod.objects.all()
paginator = Paginator(my_products_list,5)
page = request.GET.get('page')
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 = {
"form":form,
"products":my_products_list,
"obj_list":queryset
}
if form.is_valid():
form.save()
messages.add_message(request, messages.INFO,'Product Added')
return redirect("add_prod")
return render(request,"add-prod.html",context)
我的模板文件的一小部分,
<form id="mystyle">
<table align="center">
<tr class="tableHeader">
<th>Books</th>
<th>Author</th>
<th>Price</th>
<th>Category</th>
<th>Image</th>
<th>Action</th>
</tr>
{% for i in products %}
<tr>
<td>{{i.book}}</td>
<td>{{i.author}}</td>
<td>{{i.price}}</td>
<td>{{i.cat}}</td>
<td><img src="{{i.image.url}}" alt="No Image" width=196px height=196px></td>
<td><button><a href="{% url 'update_prod' pk=i.pk %}">Edit</a></button>
<button onclick="return confirm('Are you sure want to delete?');"><a href="{% url 'del_prod' pk=i.pk %}">Delete</a></button></td>
</tr>
{% endfor %}
</table><br>
<div class="pagination">
<span class="step-links">
{% if obj_list.has_previous %}
<a href="?page={{ obj_list.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ obj_list.number }} of {{ obj_list.paginator.num_pages }}.
</span>
{% if obj_list.has_next %}
<a href="?page={{ obj_list.next_page_number }}">next</a>
{% endif %}
</span>
</div>
</form>
答案 0 :(得分:1)
您正在向模板发送my_product_list
,这是您在分页前的整个查询集。您的上下文字典应该如下所示:
context = {
"form":form,
"products":queryset,
}
然后在模板中,使用{% products.has_next %}
依此类推。
说实话,我更喜欢不同的名称,例如只调用您的网页page
,而不是queryset
,但上述内容应该有效。更好的版本,IMO:
form = ProdForm(request.POST or None,request.FILES or None)
product_list = Add_prod.objects.all()
paginator = Paginator(my_product_list,5)
page = request.GET.get('page')
try:
product_list = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
product_list = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
product_list = paginator.page(paginator.num_pages)
context = {
"form": form,
"product_list": product_list,
}
模板:
{% for i in product_list %}
<tr>
<td>{{i.book}}</td>
<td>{{i.author}}</td>
<td>{{i.price}}</td>
<td>{{i.cat}}</td>
<td><img src="{{i.image.url}}" alt="No Image" width=196px height=196px></td>
<td><button><a href="{% url 'update_prod' pk=i.pk %}">Edit</a></button>
<button onclick="return confirm('Are you sure want to delete?');"><a href="{% url 'del_prod' pk=i.pk %}">Delete</a></button></td>
</tr>
{% endfor %}
</table><br>
<div class="pagination">
<span class="step-links">
{% if product_list.has_previous %}
<a href="?page={{ product_list.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ product_list.number }} of {{ product_list.paginator.num_pages }}.
</span>
{% if product_list.has_next %}
<a href="?page={{ product_list.next_page_number }}">next</a>
{% endif %}
</span>
</div>