1

そのため、ページネーションを使用して、特定の日に利用可能なすべての一致するクラスを表示しようとしていますが、ページネーション ドキュメントに従って、各ページは同じ 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 %}
4

2 に答える 2

1

GET または POST から来るものはすべて文字列になるため、常に最初の例外に遭遇します。試す:

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

ビューの残りの部分を見ずに、問題の残りの部分を推測するのは困難です。ビューの他のビットを見ると、正規表現を使用して urls.py ファイルで既に保証しているため、 day が int であることを確認する必要はありませんが、 Http404 object を呼び出さないでください。raise Http404

于 2012-09-24T20:11:13.373 に答える
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 (検索された用語) を考慮します。

私の過ちが、同様の状況で立ち往生した誰かを助けることができることを願っています.

于 2012-09-25T20:12:46.060 に答える