0

Djangoでは、クエリアイテムを複数のページに表示するためのページ付けを実装するのは非常に簡単です。また、ページ全体を毎回ロードするのではなく、Ajaxを使用して実際に変更されたページのビットのみを更新することも非常に簡単です。ただし、2つを組み合わせると少し問題があります。

以下の例では、検索結果は適切なに表示されますresult_list.html

<form id="search-form" method="get" action=".">
        {{ form.as_p }}
        <input type="submit" value="search" />
</form>
<div id="search-results">           
       {% include "result_list.html" %}
</div>

result_list.html:

{% if sales_items %}
    {% for item in sales_items %}
            <li>
                <ul>                
                    Search Result...        
                </ul>                               
            </li>       
        {% endfor %}
        {% if show_paginator %}
                <div class="paginator">
                          ...
                  (Page {{ page }} of {{ pages }})
                </div>
        {% endif %}  
{% else %}
    {% trans 'No Items found.' %}
{% endif %}

このソリューションは非常にうまく機能します。(ajaxを介して)何かを検索するたびに、ページネーションを含むresult_list.htmlが更新されるためです。

問題:

しかし、代わりにテーブルがあれば、このアプローチを使用できなくなりました。

<table class="table">
   <thead>
        <tr>
           <th>...</th>
        </tr>
   </thead>
   <tbody id="search_result">
        {% include 'calls_list.html' %}
   </tbody>
</table>

更新が必要なページビットは、<tbody>タグの間にあります。したがって、Calls_List.htmlは、によって理解されるタグのみ<tr>を返します。(上記の例とは異なり)そこにもページネーターコードを貼り付けることができませんでした:<td><tbody>

    {% if show_paginator %}

      <div class="paginator">
         ...
          (Page {{ page }} of {{ pages }})
      </div>
    {% endif %}  

...テーブルのtbodyは、そこにdiv要素が見つかることを期待していないためです。

サーバーへの2回目のラウンドトリップを実行して、ページネーションコードを個別にプルしない限り。私はこれに対するきれいな解決策を見つけることができませんでした。

あなたは同じ状況にありましたか、どのようにこれを解決しましたか?

どうもありがとう、

4

1 に答える 1

1
  • 1つの解決策は、ページネーション部分を配置しますが、必要に応じ<tr>て視覚化を変更することです(たとえば、1つだけ<td>、または複数の列にまたがるなど)。

  • 別の解決策は、Calls_list.html 完全なタグを返すように変更<table>し、ページネーション部分をテーブルから別のに配置すること<div>です。

  • 3番目のオプションは、ページ付けデータとともに行データのJSONを返すことです。次に、既存のテーブル行とページ付けhtmlを更新するだけです。

于 2012-09-01T17:18:56.060 に答える