2017-06-09 88 views
0

book_list.htmlis_paginated不能正常工作了基于类的观点在Django

{% extends "base.html" %} 
{% block content %} 
<h3> Available books </h3> 
{% if book_list %} 
<ul> 
    {% for book in book_list %} 
    <li> <a href = "{{ book.get_absolute_url }}">{{book.title }}</a> <small> by {{book.author }}</small></li> 
    <p>{{ book.summary }} 
    {% endfor %} 
<ul> 
{% endif %} 
{% if is_paginated %} 
    <div class="pagination"> 
     <span class="page-links"> 
      {% if page_obj.has_previous %} 
       <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a> 
      {% endif %} 
      <span class="page-current"> 
       Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}. 
      </span> 
      {% if page_obj.has_next %} 
       <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a> 
      {% endif %} 
     </span> 
    </div> 
{% else %} 
     <h4> pagination not working</h4> 
{% endif %} 
{% endblock %} 

类views.py:

class BookListView(generic.ListView): 
    model = Book 
    paginate_by = 2 
    queryset =Book.objects.all() 

urls.py:

urlpatterns =[ 
url('^$',views.index, name ='index'), # matching with an empty string 
url('^books/$',views.BookListView.as_view(),name ='books'), #the one to which I am adding the paginator 
url('^book/(?P<pk>\d+)/$',views.BookDetailView.as_view(),name='book-detail'), 

] 

Book模型:

class Book(models.Model): 
    title=models.CharField(max_length=100) 
    author = models.ForeignKey('Author',on_delete=models.SET_NULL,null = True) 
    summary = models.TextField(max_length=200,help_text="Enter the description") 
    isbn = models.CharField('ISBN',max_length=13 ,help_text='13 Character <a href="https://www.isbn-international.org/content/what-isbn">ISBN number</a>') 
    genre = models.ManyToManyField(Genre,help_text = 'selct a genre for this book') 

    class Meta: 
    ordering =["title"] 
    def __str__(self): 
    return self.title 

    def get_absolute_url(self): 
    return reverse('book-detail',args=[str(self.id)]) 

book_list得到完美渲染,问题是与paginator,is_paginated条件不起作用,它执行else语句,我一直在尝试超过3小时,但找不到解决方案,我错过了什么这里 ?
Django的版本:1.11.2 的Python:3.5

编辑: 更新1:问题是paginate_by值是两个,总条款显示了也就两因而没有主动is_paginated标签,当我添加一个比paginate_by值更多的项目时,它工作正常。

回答

1

使用这个,你有一些问题,如果条件

{% extends "base.html" %} 
{% block content %} 
<h3> Available books </h3> 
{% if object_list %} 
    <ul> 
     {% for book in object_list %} 
     <li> <a href = "{{ book.get_absolute_url }}">{{book.title }}</a> <small> by {{book.author }}</small></li> 
     <p>{{ book.summary }} 
     {% endfor %} 
    <ul> 

    {% if is_paginated %} 
     <div class="pagination"> 
      <span class="page-links"> 
       {% if page_obj.has_previous %} 
        <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a> 
       {% endif %} 
       <span class="page-current"> 
        Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}. 
       </span> 
       {% if page_obj.has_next %} 
        <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a> 
       {% endif %} 
      </span> 
     </div> 
    {% else %} 
      <h4> pagination not working</h4> 
    {% endif %} 
     {% else %} 
     <h4> No book</h4> 
{% endif %} 
{% endblock %} 
+0

没有,我仍然得到同样的错误。 –

+0

把你的查询集放在paginate_by上面的视图中,然后检查 – Exprator

+0

这样做,但仍然是同样的问题.... –