使用django-tables2显示页码

时间:2013-05-07 00:12:15

标签: python django django-tables2

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

文档没有特别提到这一点,所以我猜这可能会占用一些表 - 但是,我希望有人已经完成了这个。

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

提前致谢。

3 个答案:

答案 0 :(得分:10)

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

要做到这一点,首先要复制文件

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

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

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

{% block pagination.allpages %}
  {% for p in table.paginator.page_range %}
    <a href="{% querystring table.prefixed_page_field=p %}">{{ p }}</a>
  {% endfor %}
{% endblock pagination.allpages %}

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

{% load render_table from django_tables2 %}
...
{% render_table table "mytable.html" %}

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

上述内容仅供读者阅读:)

答案 1 :(得分:4)

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

  • 包含在<ul> HTML块中,其中CSS类可以很好地播放&#34;使用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 pagina == 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 %}
    

答案 2 :(得分:0)

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

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

title_sort

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