0

我正在尝试为我网站上的用户列表制作分页器(使用 twitter 引导程序)。我从 twitter bootstrap 获取的 html 代码如下所示:

    <div class="pagination" >
    <ul>
    {% if users.has_previous %}
    <li><a href="?page={{ users.previous_page_number }}">Prev</a></li>
    {% endif %}

    <li><a href="/users/?page=1">...</a></li>
    <li><a href="/users/?page=2">...</a></li>
    <li><a href="/users/?page={{users.number}}">{{users.number}}</a></li>
    <li><a href="/users/?page=4">...</a></li>
    <li><a href="/users/?page=5">...</a></li>

    {% if users.has_next %}
    <li><a href="?page={{ users.next_page_number }}">Next</a></li>
    {% endif %}
    </ul>
    </div>

我不知道在点的地方写什么。如何将变量 {{users.number}} 转换为 int 以使用数字进行操作并获取( {{users.number}}-1 )等以放置它们而不是点?

我尝试使用过滤器,但它不起作用。我想我只能在 {% %} 而不是 {{}} 中使用它们。

是否可以在模板中正确设置?或者我应该添加views.py然后传递给我的模板?

4

1 回答 1

0

add过滤器尝试将参数自动转换为整数。因此, 如果值可以转换为 int,则{{ value|add:2 }}or将返回 6。{{ value|add:"2" }}并且{{ value|add:-2 }}应该返回 4。

但我认为模板标签或过滤器也适用于此。只是一个简单的函数,它可以获取所需的数字,可能还有两个方向的步骤,例如 2,然后返回[n-2, n-1, n, n+1, n+2]. 然后,您可以遍历添加 li-tag 的列表。

这将是过滤器的一个示例:

# templates/templatetags/calculate_numbers.py

from django import template

register = template.Library()

@register.filter
def calculate_numbers(n, steps):
    n = int(n)     
    return range(n-steps, n+steps+1)

在您的模板上:

{% load calculate_numbers %}

{% for n in users.number|calculate_numbers:2 %}
<li><a href="/users/?page={{ n }}">{{ n }}</a></li>
{% endfor %}
于 2013-04-20T20:40:48.330 回答