0

サイトのユーザーのリスト用に (twitter ブートストラップを使用して) ページネーターを作成しようとしています。Twitterのブートストラップから取得した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 に変換して数値を操作し、get ( {{users.number}}-1 ) などをドットの代わりに配置するにはどうすればよいですか?

フィルターで試してみましたが、うまくいきません。{{}} ではなく {% %} でのみ使用できると思います。

テンプレでちゃんと作れますか?または、views.py に追加してからテンプレートに渡す必要がありますか?

4

1 に答える 1

0

フィルターは、add引数を整数に自動変換しようとします。したがって 、値を int に変換できる場合、{{ value|add:2 }}orは 6 を返します。{{ value|add:"2" }}4 を返す{{ value|add:-2 }}必要があります。

しかし、テンプレートタグやフィルターもこれに適していると思います。必要な数を取得し、おそらく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 %}
于 2013-04-20T20:40:48.330 に答える