geo*_*ddi 6 python django django-tables2
我目前正在使用django-tables2显示数据集.
文档没有特别提到这一点,所以我猜这可能会占用一些表 - 但是,我希望有人已经完成了这一点.
如何使用表格下方的django-tables2呈现页码?我希望能够显示的是用户可以单击的页码的水平列表.
提前致谢.
Ser*_*eim 10
您需要创建自定义页面呈现模板 - 您不需要覆盖任何类.
要做到这一点,首先要复制文件
PYTHON\Lib\site-packages\django_tables2\templates\django_tables2\table.html
到templates你的django应用程序内的目录,并将其重命名为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" %}
这很简单,如果你有很多页面会给你带来麻烦(所以你必须使用一些ifs来检查table.paginator.num_pages变量中的页数).此外,您可以突出显示当前页面并使用该table.page.number变量禁用链接 .
以上是作为读者的例外:)
改进@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 %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3167 次 |
| 最近记录: |