Wie können Sie die Vorlagenseite von Listenobjekten und nicht die Ansichtsseite einschränken?


83

Eine Möglichkeit, Objekte einzuschränken, besteht darin, einer solchen Funktion eine Einschränkung hinzuzufügen

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

Wie erreichen Sie dies jedoch innerhalb einer Vorlage und nicht innerhalb einer Ansicht?

Ich weiß, dass Sie Objekte in einer Vorlage filtern und Zeichen begrenzen können, aber wie können Sie die Anzahl der in einer Schleife angezeigten Objekte tatsächlich begrenzen? Über die Vorlage. Der folgende Code durchläuft beispielsweise alle Objekte ....

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

Wie breche ich die Schleife, sagen wir nach den ersten 3 Objekten / Gegenständen. Und wie mache ich das in der Vorlage? Danke im Voraus.


Antworten:


178

Es gibt einen sliceFilter, den Sie in Vorlagen verwenden können. Dies funktioniert genauso wie das Schneiden in der Ansicht.

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

2
Wenn Sie ein Szenario haben, in dem Sie verwenden {% for object in user.objects.all %} , können Sie verwenden{% for object in user.objects.all|slice:":10" %}
Samir Tendulkar

Bitte geben Sie mir den Slice-Dokumentationslink von Django.
Squal

1
Es ist buchstäblich aus meiner obigen Antwort verbunden.
Daniel Roseman

Ich habe das @ Daniel. Ich suche Slice im Github Django Repository, aber ich finde Slice_Filter nicht Slice.
Squal

12

Sie möchten den Slice- Vorlagenfilter verwenden

Hier ist Ihr Beispiel geändert, um es zu verwenden:

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

1
Ich weiß, dass ich irgendwie nörgele, aber es sollte sein: {{ new.title}}und {{ new.body }}
Hussam

Dies ist ein vollständigeres Codebeispiel als die akzeptierte Antwort. Dies ist eine hilfreichere Antwort. Deshalb habe ich mich dafür ausgesprochen und erkläre, warum
Keith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.