Django模板中的简单数学

时间:2016-05-11 17:47:39

标签: python django

我的模板中有一个用于分页的表格设置,在左下角显示了显示的项目数量,如下所示:

enter image description here

此处10称为count19称为total

如果我转到下一页(截至目前我的表格中只有2页数据),则会显示Showing 9 of 19 items

我想稍微修改一下,将其显示为Showing 1 - 10 of 19,然后Showing 11 - 19 of 19。看起来算法非常简单。我所要做的就是初始化变量start = 1,将信息打印为Showing {{start}} - {{count}} of {{total}}。然后,当我转到下一页start = count +1count += count时。但是我不知道如何在django template中执行此操作。我尝试使用with tag作为{%with start = 1%},但它给了我一个错误'with' expected at least one variable assignment

这就是所有魔法发生的地方:

{% if table.page %}
        {% with table.page.paginator.count as total %}
            {% with table.page.object_list|length as count %}
                {% with start = 1 %}
                    {% block pagination %}
                        <ul class="pagination">
                            {% block pagination.cardinality %}
                                <li class="cardinality">
                                    {% if total != count %}
                                        {% blocktrans %}
                                            Showing {{ count }} of {{ total }}
                                        {% endblocktrans %}
                                    {% else %}
                                        {{ total }}
                                    {% endif %}
                                    {% if total == 1 %}
                                        {{ table.data.verbose_name }}
                                    {% else %}
                                        {{ table.data.verbose_name_plural }}
                                    {% endif %}
                                </li>
                            {% endblock pagination.cardinality %}
                        </ul>

1 个答案:

答案 0 :(得分:2)

你不需要为此做数学。 page对象已经为您提供了相关信息:start_indexend_index

所以:

{% with table.page as page %}
Showing {{ page.start_index }} - {{ page.end_index }} of {{ page.paginator.count }}
{% endwith %}

另外,您可以使用page.has_other_pages来确定是否有其他页面,而不是将总数与当前计数进行比较的复杂逻辑。

请参阅the pagination docs