ビュー側ではなく、リストオブジェクトのテンプレート側をどのように制限しますか


83

オブジェクトを制限する方法の1つは、このような関数に制限を追加することです。

def ten_objects():
    obj = Model.objects.all()[0:10]  # limit to 10
    return {'objects': obj}

ただし、ビュー内ではなくテンプレート内でこれをどのように実現しますか?

テンプレート内のオブジェクトをフィルタリングして文字を制限できることは知っていますが、ループに表示されるオブジェクトの量を実際に制限するにはどうすればよいですか。テンプレート経由。たとえば、次のコードはすべてのオブジェクトをループします。

    <ul>
     {% for new in news %}
      <li>
       <p>{{ news.title }}</p>
       <p>{{ news.body }}</p>
      </li>
     {% endfor %}
    </ul>

最初の3つのオブジェクト/アイテムの後で、ループを解除するにはどうすればよいですか。そして、テンプレート内でそれを行うにはどうすればよいですか。前もって感謝します。


回答:


178

ありsliceますが、テンプレートで使用できるフィルターが。これは、ビュー内でスライスするのとまったく同じように機能します。

{% for new in news|slice:":10" %}

2
使用しているシナリオがある場合は、{% for object in user.objects.all %} 次を使用できます{% for object in user.objects.all|slice:":10" %}
Samir Tendulkar 2018

djangoのスライスドキュメントリンクを教えてください。
squal 2018年

1
上記の私の答えから文字通りリンクされています。
ダニエルローズマン

私はその@Danielを手に入れました。github djangoリポジトリでスライスを検索しましたが、slice_filterがsliceではありません。
squal 2018年

12

スライステンプレートフィルターを使用したい

これを使用するように変更された例を次に示します。

<ul>
{% for new in news|slice:":3" %}
<li>
<p>{{ new.title }}</p>
<p>{{ new.body }}</p>
</li>
{% endfor %}
</ul>

1
私はちょっとしつこいことを知っていますが、それは次のようになります:{{ new.title}}そして {{ new.body }}
Hussam 2012年

これは受け入れられた回答よりも完全なコード例であり、これはより有用な回答であるため、私は賛成して理由を説明しています
キース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.