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