9

我目前正在使用 django-tables2 显示数据集。

文档没有特别提到这一点,所以我猜这可能需要一些表格覆盖 - 但是,我希望那里有人已经完成了这一点。

如何在我的表格下方使用 django-tables2 呈现页码?我希望能够显示的是用户可以单击的页码水平列表。

提前致谢。

4

3 回答 3

13

您需要创建一个自定义页面呈现模板 - 您不需要覆盖任何类。

为此,首先复制文件

PYTHON\Lib\site-packages\django_tables2\templates\django_tables2\table.html

templates您的 django 应用程序中的目录并将其重命名为mytable.html您喜欢的任何其他名称。

现在,您需要更改该文件的分页块。有很多方法可以做你喜欢的事情,但一个简单的方法是在分页块内添加以下行(你可以根据你的具体需要删除或保留其他内容):

{% 块分页.allpages %}
  {% for p in table.paginator.page_range %}
    <a href="{% querystring table.prefixed_pa​​ge_field=p %}">{{ p }}</a>
  {% endfor %}
{% endblock pagination.allpages %}

最后,要使用您的模板,只需将您的自定义模板名称传递给 render_table 命令:

{% 从 django_tables2 加载 render_table %}
...
{% render_table table "mytable.html" %}

这很简单,如果你有很多页,就会给你带来麻烦(所以你必须使用一些s 通过变量if来检查页数)。table.paginator.num_pages此外,您可以使用 table.page.number变量突出显示当前页面并禁用链接。

以上内容留给读者作为练习:)

于 2013-05-07T22:04:17.597 回答
5

改进@Serafeim 答案(或解决他留下的练习):这是一个分页块,仅使用 Django 模板语法,呈现页码:

  • 包含在一个<ul>HTML 块中,其中的 CSS 类与 Bootstrap 一起“玩得很好”;

  • 如果超过 8 页,则最多显示当前页面上下 3 页;

  • 始终显示第一页和最后一页,在它们和范围的开始或结束之间使用省略号(如果需要)。

     {% with current_page=table.page.number page_count=table.paginator.num_pages rows_per_page=table.page.object_list|length total_rows=table.page.paginator.count %}
     {% block pagination %}
     <ul class="pagination">
         {% block pagination.allpages %}
             <li class="current">
                 {% blocktrans %}Page {% endblocktrans %}
             </li>
             {% for page in table.paginator.page_range %}
                 {% with range_start=current_page|add:"-3" range_end=current_page|add:"3" page_count_minus_5=page_count|add:"-5" page_count_minus_1=page_count|add:"-1" %}
                     {% if page == current_page %}
                         <li class="active">
                             <span>{{ page }}</span>
                         </li>
                     {% elif page == 1 or page >= range_start and page <= range_end or page == page_count %}
                         <li class="next">
                             <a href="{% querystring table.prefixed_page_field=page %}">{{ page }}</a>
                         </li>
                     {% endif %}
                     {% if page == 1 and current_page > 5 or page == page_count_minus_1 and current_page <= page_count_minus_5 %}
                         <li class="current">...</li>
                     {% endif %}
                 {% endwith %}
             {% endfor %}
         {% endblock pagination.allpages %}
    
         {% block pagination.cardinality %}
             <li class="cardinality">
                 {% if total_rows != rows_per_page %}{% blocktrans %}
                     {{ rows_per_page }} of {{ total_rows }}{% endblocktrans %}
                 {% else %}
                     {{ total_rows }}
                 {% endif %} 
                 {% if total_rows == 1 %}
                     {{ table.data.verbose_name }}
                 {% else %}
                     {{ table.data.verbose_name_plural }}
                 {% endif %}
             </li>
         {% endblock pagination.cardinality %}
     </ul>
     {% endblock pagination %}
     {% endwith %}
    
于 2017-05-23T09:37:01.980 回答
3

分页在版本# >= 2.0.0 https://django-tables2.readthedocs.io/en/latest/pages/CHANGELOG.html中引入

只需在 settings.py 中添加以下代码。带有数字的分页将使用 bootstap 4 样式呈现。确保在 html 模板中有 bootstrap 4 参考。

DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap4.html'

并查看文档中的更多样式。 https://django-tables2.readthedocs.io/en/latest/pages/custom-rendering.html#available-templates

于 2019-05-15T12:11:46.247 回答