5

ユーザーがノートカードを検索し、一度に6ページずつ表示される結果を表示できる検索ビューがあります。

他のすべてのビューでページ付けを使用していますが、正しく機能します。ただし、クエリで使用すると、最初の6つの結果が表示され、「ページ1/2」と次のボタンが表示されますが、[次へ]をクリックすると結果が見つかりません。

'*'クエリをsearch-allとして設定しました。そのクエリを検索すると、最初のリクエスト呼び出しは次のようになります。

http://127.0.0.1:8000/search/?q=*

[次へ]をクリックすると、呼び出しは次のようになります。

http://127.0.0.1:8000/search/?page=2

検索URLは次のとおりです。

url(r'^search/', 'notecard.search.views.search', name="search"),

検索ビューは次のとおりです。

@login_required(login_url='/auth/login/')
def search(request):
    query = request.GET.get('q', '')
    results = []
    notecard_list = []
    if query:
        if query == "*":
            results = Notecard.objects.filter(section__semester__user=request.user)
        else:
            results = Notecard.objects.filter(Q(section__semester__user=request.user), Q(notecard_body__icontains=query)|Q(notecard_name__icontains=query))
        paginator = Paginator(results, 6)

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

        try:
            notecard_list = paginator.page(page)
        except (EmptyPage, InvalidPage):
            notecard_list = paginator.page(paginator.num_pages)
    return list_detail.object_list(
        request,
        queryset = Notecard.objects.filter(section__semester__user=request.user),
        template_name = "notecards/search.html",
        template_object_name = "results",
        extra_context = {"results": results, "notecard_list": notecard_list,},
    )

検索テンプレートは次のとおりです。

{% extends "base.html" %}
{% block title %} Notecard List | {% endblock %}

{% block content %}
<div id='main'>
<table id='notecards'>
  <tr>
        <th class="name">Search Results</th>
  </tr>
</table>

<table id='known_split'>
        <p>Search results:<a class="edit" href="{% url semester_list %}">Back to Semesters</a></p>
            {% for result in notecard_list.object_list %}
                    <tr>
                        <td class="image">{% if result.known %}<img src="{{ STATIC_URL }}/images/known.png" width="41" height="40" />{% else %}<img src="{{ STATIC_URL }}/images/unknown.png" width="41" height="40" />{% endif %}</td>
                    <td class="text"><a href="{% url notecards.views.notecard_detail result.id %}">{{ result.notecard_name|truncatewords:9 }}</a></td>
                    </tr>
                {% endfor %}
</table>

<div class="pagination">
  <span class="step-links">
{% if notecard_list.has_previous %}
<a class="navlink" href="?page={{ notecard_list.previous_page_number }}">previous</a>
{% endif %}

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

{% if notecard_list.has_next %}
<a class="navlink" href="?page={{ notecard_list.next_page_number }}">next</a>
{% endif %}
  </span>
</div>

{% endblock %}

私が言ったように、私は他のすべてのビューで基本的に同じページネーションをうまく使用しているので、これはどういうわけかクエリによるものだと信じなければなりません。

4

2 に答える 2

4
  1. 2ページ目のURLに引数を指定していませんq(URLは代わりに次のようになりますhttp://127.0.0.1:8000/search/?q=*&page=2
  2. ページネーションListViewを含むクラスベースのビュー(より正確には)をチェックする必要があります
于 2012-05-01T18:16:15.293 に答える
1

URLにq引数を含める必要があります。has_previous & has_next

<a class="navlink" href="?page={{ notecard_list.previous_page_number }}&q1={{ request.GET.q1 }}">previous</a>

と、

<a class="navlink" href="?page={{ notecard_list.next_page_number }}&q1={{ request.GET.q1 }}">next</a>
于 2017-06-04T16:11:55.007 に答える