2016-07-18 2 views
0

Я ссылался на код страницы из официальной документации django. Я не получаю никаких ошибок, но все объекты отображаются на одной странице. У меня есть десять объектов в представлении, и я дал 5 объектов (книга изображение с деталями), которые будут отображаться на каждой странице, но все 10 объектов отображается на странице 1 и 2.Django pagination from doc not working

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> 

ответ

1

Вы отправляете my_product_list в шаблон, который является вашим целым набором запросов перед разбиением на страницы. Ваш контекст словарь должен вместо этого выглядеть следующим образом:

context = { 
     "form":form, 
     "products":queryset, 
} 

А затем в шаблоне, используйте {% products.has_next %} и так далее.

Чтобы быть честным, я бы предпочел, чтобы другие имена, например, вызывали вашу страницу просто page, а не queryset, но вышеприведенное должно работать. Nicer версия, 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> 
+0

Благодаря его работы – Bhanukiran