Django 2分页之间的冲突

问题描述:

我试图显示所有的数据assoicated每个人和每个房子在一个单一的模板与分页。 问题是每次使用分页示例人查看特定数据的条目时。另一个叫做房子的分页被重新设置。 例如,如果我在第3页的房子,我尝试查看页面人员的其他条目。房子分页将重置为1.如何解决此分页冲突?Django 2分页之间的冲突

车型

class Person(models.Model): 

    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100, blank=True) 

    def __unicode__(self): 
     return self.name 

class House(models.Model): 

    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100) 

意见

def Display(request): 
     user= User.objects.get(username=request.user) 
     comment = Person.objects.get(user=user) 

     posts = House.objects.filter(user=user) 

     paginator = Paginator(comment, 5) 

     try: n = int(request.GET.get("n", '1')) 
     except ValueError: page = 1 

     try: 
      comment = paginator.page(n) 
     except (InvalidPage, EmptyPage): 
      comment = paginator.page(paginator.num_pages) 





     paginator = Paginator(posts, 5) 

     try: page = int(request.GET.get("page", '1')) 
     except ValueError: page = 1 

     try: 
      posts = paginator.page(page) 
     except (InvalidPage, EmptyPage): 
      posts = paginator.page(paginator.num_pages) 

     return render(request,'display.html',{'posts':posts,'comment':comment}) 

HTML

{% for p in posts.object_list %} 
{{p.name}} 
{% endfor %} 


    {% if posts.object_list and posts.paginator.num_pages > 1 %} 
    <div class="pagination" style="margin-top: 20px; margin-left: -20px; "> 


       &nbsp;Page {{ posts.number }} of {{ posts.paginator.num_pages }}<br> 

      {% if posts.has_previous %} 
       <a class="Link" href= "{% if formula %}?text={{formula}}&{% else %}?{% endif %}page={{ posts.previous_page_number }}">newer entries &lt;&lt; </a> 
      {% endif %} 
      {% if posts.has_next %} 
       <a class="Link" href="{% if formula %}?text={{formula}}&{% else %}?{% endif %}page={{ posts.next_page_number }}"> &gt;&gt; older entries</a> 

      {% endif %} 
     </span> 
    </div> 
    {% endif %} 


{% for c in comment.object_list %} 
{{c.name}} 
{% endfor %} 

    {% if comment.object_list and comment.paginator.num_pages > 1 %} 


       &nbsp;Page {{ comment.number }} of {{ comment.paginator.num_pages }} 
       {% if comment.has_previous %} 
       <a class="Link" href= "?n={{ comment.previous_page_number }}">newer entries &lt;&lt; </a> 
      {% endif %}<br> 
      {% if comment.has_next %} 
       <a class="Link" href="?n={{ comment.next_page_number }}"> &gt;&gt; older entries</a> 

      {% endif %} 
     </span> 
    </div> 
    {% endif % 
+0

一件事,我看不对,你的'Display'视图的第一线,移动你的'评论= Person.objects.get(用户=用户)'下移一行,因为'user'不存在(你有它在它下面的线上设置)。 – themanatuf 2013-05-07 13:11:40

+0

好的,谢谢。现在大问题“与分页冲突” – donkeyboy72 2013-05-07 13:37:42

首先,变量名称与描述所有内容的方式相当混乱。

的问题是,你正在使用的页面两个不同的变量:nperson(或comment)和pagehouse(或岗位)。在您的每个<a href="">中,您不仅需要设置npage。所以:

<a class="Link" href= "{% if formula %}?text={{formula}}&{% else %}?{% endif %}page={{ posts.previous_page_number }}&n={{ comment.number }}">newer entries &lt;&lt; </a> 
<a class="Link" href="{% if formula %}?text={{formula}}&{% else %}?{% endif %}page={{ posts.next_page_number }}&n={{ comment.number }}"> &gt;&gt; older entries</a> 

<a class="Link" href= "?n={{ comment.previous_page_number }}&page={{ posts.number }}">newer entries &lt;&lt; </a> 
<a class="Link" href="?n={{ comment.next_page_number }}&page={{ posts.number }}"> &gt;&gt; older entries</a> 
+0

对不起我如何描述变量 – donkeyboy72 2013-05-07 14:01:23

+0

我明白了谢谢 – donkeyboy72 2013-05-07 14:53:48

在同一视图你改变paginator值的两倍

paginator = Paginator(comment, 5) 

# here you have code that does stuff and some lines below 

paginator = Paginator(posts, 5) 
如果你想在同一个视图中的两个paginators你也应该区别他们的名字(并将它们添加到您的上下文变量)

东西我可以建议是有,你要调用一个Ajax分页视图

在模板中的页面之间切换。通过这种方式,您可以将页面分别更改为每个结果集,而无需重新加载整个视图(并且可能会丢失分页状态)。

+0

@Jacob - 虽然我同意这个答案也指出了一个潜在的问题(不是错误,对我原来的评论感到抱歉),但它不会解决你原来的问题。看到我的答案。 – themanatuf 2013-05-07 13:56:42

+0

@Jacob是的,manmanuuf是正确的:如果你只是想解决你目前的问题,那就走他的解决方案吧。我主要是关于如何使用更好设计的解决方案实际改善您的代码的建议:) – 2013-05-07 14:00:37

+0

哦好吧谢谢 – donkeyboy72 2013-05-07 14:04:31