在模板中将django变量转换为int

时间:2013-04-20 20:01:12

标签: twitter-bootstrap django-templates

我正在尝试为我网站上的用户列表创建一个分页器(使用twitter bootstrap)。我从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中添加,然后传递给我的模板?

1 个答案:

答案 0 :(得分:0)

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

但我认为模板标签或过滤器也适用于此。 只是一个简单的函数,可以获得所需的数字,也许是两个方向上的步骤,例如2,然后返回[n-2, n-1, n, n+1, n+2]列表。然后你可以在列表中循环添加li-tags。

这是过滤器的一个例子:

# 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 %}