0

我试图在一个模板上显示与每个人和每个房子相关的所有数据,每个模板都带有分页。问题是每次我使用分页示例人员查看特定数据的条目时。另一个名为 house 的分页被重置。例如,如果我在 house 的第 3 页上,我尝试查看页面 person 的其他条目。房屋分页将重置为 1。如何解决此分页冲突?

楷模

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 %
4

2 回答 2

1

首先,您的变量名称与您描述一切的方式非常令人困惑。

问题是您为页面使用了两个不同的变量:nfor person(或comment)和pagefor house(或帖子)。在您的每一个中,您<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>
于 2013-05-07T13:51:55.730 回答
0

在同一个视图中,您将值更改paginator两次

paginator = Paginator(comment, 5)

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

paginator = Paginator(posts, 5)

如果您想在同一个视图中使用两个分页器,您还应该以不同的方式命名它们(并将它们添加到您的上下文变量中)

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

于 2013-05-07T13:47:01.553 回答