【问题标题】:Django pagination doesn't display all pagesDjango分页不显示所有页面
【发布时间】:2017-06-28 14:32:19
【问题描述】:

我正在通过分页改进我的Django project,以便逐页显示查询结果。 感谢@neverwalkaloner 帮助我:Create several pages from array

但我得到一个无法解决的错误。我可以显示第一页并且效果很好,但是当我选择下一页时,它不会显示下一个结果。

如你所见:

首页

第二页

这是我的看法:

@login_required
def Table_annuelle_BirthCertificate(request) :

    query_naissance = request.GET.get('q1')
    request.session['query_naissance'] = query_naissance

    if query_naissance  :
        query_naissance_list = BirthCertificate.objects.filter(created__icontains=query_naissance).order_by('lastname')
    else :
        query_naissance_list = BirthCertificate.objects.none() # == []

    paginator = Paginator(query_naissance_list, 3)
    page = request.GET.get('page', 1)

    try:
        query_naissance_list = paginator.page(page)
    except PageNotAnInteger:
        query_naissance_list = paginator.page(1)
    except EmptyPage:
        query_naissance_list = paginator.page(paginator.num_pages)

    context = {
        "BirthCertificate":BirthCertificate,
        "query_naissance" : query_naissance,
        "query_naissance_list" : query_naissance_list,
        "PageNotAnInteger":PageNotAnInteger,
        }

    return render(request, 'annuel.html', context)

还有我的模板:

<h4 class = "col-sm-10"> <b><font color="#0083A2"> <span class="glyphicon glyphicon-user"></span> Prévisualisation de la table annuelle des naissances </b></font></h4>

<form class = "col-sm-10" method="GET" action="">
    <input type="text"  name="q1" placeholder="Entrer une année" value="{{ request.GET.q1 }}"> &nbsp;
    <input class="button" type="submit" value="Rechercher">
</form>

<br></br>
<br></br>

<table style="width:50%">
    <tbody>
        <tr>
            <th>Nom & prénom(s)</th>
            <th>Lieux de Naissance</th>
            <th>Date des actes</th>
            <th>Numéro de l'acte</th>
        </tr>
        {% for item in query_naissance_list %}
        <tr>
            <td> {{item.lastname}} {{item.firstname}} </td>
            <td> {{item.birthcity}} ({{item.birthcountry.name}}) </td>
            <td> {{item.created}} <p></p> {{item.birthday}} (Naissance) </td>
            <td> {{item.id}} </td>
        </tr>
        {% endfor %}
    </tbody>
</table>

{% if query_naissance_list.has_previous %}
<a href="?page={{ query_naissance_list.previous_page_number }}">Page précédente</a>
{% endif %}

<span class="current">
    Page {{ query_naissance_list.number }} sur {{ query_naissance_list.paginator.num_pages }}.
</span>

{% if query_naissance_list.has_next %}
    <a href="?page={{ query_naissance_list.next_page_number }}">Page suivante</a>
{% endif %}

你有想法吗?我正在检查很多教程,但我没有找到我忘记了什么?

【问题讨论】:

  • query_naissance_list = paginator.page(page) 可能会在 try 块中引发您没有看到的异常
  • 我使用了@Sayse 示例并且它有效。我必须每次将我的q1 变量指定给每一页。我认为它对所有页面都是全局的,最后不是

标签: python html django pagination


【解决方案1】:

每次指定查询集时都会丢失 get 参数

query_naissance = request.GET.get('q1')

我不完全确定你从哪里得到这个q1,所以你要么需要将它包含在锚点的 get 参数中

<a href="?page={{ query_naissance_list.next_page_number }}&q1={{ request.GET.q1 }}">

<a href="?page={{ query_naissance_list.previous_page_number }}&q1={{ request.GET.q1 }}">

或找到其他方法来获取此q1

【讨论】:

  • 用户在数组正上方的字段中写入年份。 q1 对应的值作为变量。因此,数组将查询结果显示给包含dateq1 值的所有对象,分页让我可以逐页显示结果。
  • 它适用于您的编辑!谢谢 :) 我必须为每个页面指定 q1 变量。我认为它在我的脚本中是自动的。
猜你喜欢
  • 2017-04-29
  • 2012-12-05
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多