Django:每个分页页面显示相同的结果

时间:2012-09-24 20:03:01

标签: django pagination django-urls

所以我尝试使用分页来显示某一天可用的所有匹配类,但是在分页文档之后,每个页面只返回相同的10个结果。我错过了什么/我应该在urlconf中拥有什么?此外,如果我尝试使用分页来显示搜索结果,当我尝试选择下一页时,我收到错误“视图search.views.search_classes没有返回HttpResponse对象”。任何对两个或两个例子的输入都将非常感激。

#views.py
def upcoming_class_list(request, day):
    try:
        day = int(day)
    except ValueError:
        raise Http404()
    today = datetime.date.today()
    day_x = datetime.date.today() + datetime.timedelta(days=day)
    day_x_classes = UpcomingClasses.objects.filter(class_date=day_x)
    all_matches = day_x_classes
    paginator = Paginator(all_matches, 10)
    page = request.GET.get('page')
    try:
        matches = paginator.page(page)
    except PageNotAnInteger:
        matches = paginator.page(1)
    except EmptyPage:
        matches = paginator.page(paginator.num_pages)
    return render_to_response('preview.html', {'today': today, 'tomorrow': tomorrow,
            'past_classes': past_classes, 'day_x': day_x, 'day': day,
            'day_x_classes': day_x_classes, 'yesterday': yesterday, 'matches': matches,
            'page': page}, context_instance = RequestContext(request))

#urls.py
(r'^upcoming_class_list/plus/(\d{1,2})/$', upcoming_class_list),

#preview.html
<h3>Classes for {{ day_x }}</h3>
{% if matches %}
    <div class="pagination">
        <span class="step-links">
            {% if matches.has_previous %}
            <a href="?page={{ matches.previous_page_number }}">&laquo; previous </a>
            {% endif %}

            <span class="current">
            Page {{ matches.number }} of {{ matches.paginator.num_pages }} 
            </span>

            {% if matches.has_next %}
            <a href="?page={{ matches.next_page_number }}"> next &raquo;</a>
            {% endif %}
        </span>
    </div>

    {% if day_x_classes %}
        <ul type=none>
        {% for class in day_x_classes %}
            <li>
                <ul type=none>
                    <li><strong>{{ class.type }}</strong></li>
                    <li>Teacher: <a href="/profiles/{{ class.teacher }}">{{ class.teacher }}</a></li>
                    <li>Class Description: {{ class.description }}</li>
                    ...
                </ul>
            </li><br />
        {% endfor %}
        </ul>
    {% endif %}
{% else %}
<p>There are currently no scheduled upcoming classes for {{ day_x }}.</p>
{% endif %}

2 个答案:

答案 0 :(得分:1)

来自GET或POST的任何内容都是一个字符串,所以你总是遇到第一个异常。尝试:

try:
    matches = paginator.page(int(page))
except (PageNotAnInteger, ValueError):
    matches = paginator.page(1)

如果没有看到剩下的观点,就很难猜到问题的其余部分。查看视图中的其他位,您不需要检查白天是否为int,因为您已经确定在带有正则表达式的urls.py文件中,但是don't call the Http404 object,它只是{{1 }}

答案 1 :(得分:0)

好的,所以我想出了我的两个问题的答案。第一部分是因为我在模板中犯了一个愚蠢的错误。视图urlconf是正确的,但在我的模板中,我的for循环声明:

{% for class in day_x_classes %}

我本来应该使用

{% for class in matches %}

因为匹配是分页的,而不是day_x_classes。 至于对我的搜索结果进行分页,我只需要编辑

中的“上一个”和“下一个”按钮
<a href="?q={{ query }}&page={{ matches.previous_page_number }}">&laquo; previous </a>

<a href="?page={{ matches.previous_page_number }}">&laquo; previous</a>

考虑q(搜索的术语)。

我希望我的错误能够帮助陷入类似情况的人。