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.

Stu
quelle
1
<a href=" docs.djangoproject.com/de/dev/ref/templates/builtins/#slice "> slice</a>
Ignacio Vazquez-Abrams

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" %}
Daniel Roseman
quelle
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>
Chris Heisel
quelle
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