2009-06-07 4 views
3

ich eine Reihe von Django ausgebe Objekte in einer Vorlage:Wie viel Flexibilität gibt es in einer Django for-Schleife?

{% for obj in list %} 
    ... 
{% endfor %} 

Aber ich möchte die ersten fünf von diesen nur dann ausgegeben, dann den Rest in der separaten <DIV>. Wesen Die Idee setzen, dass ich kann, Verstecke die zweite Hälfte, bis sie benötigt wird.

ich so etwas wie dies ins Auge fassen, müssen aber die Elemente beschränken iteriert:

{% for obj in list %} 
    ... 
{% endfor %} 

<a href="" onclick="unhide()">Show hidden</a> 
<div id="hidden"> 
    {% for obj in list %} 
     ... 
    {% endfor %} 
</div> 

Ist es möglich, das allein in der Vorlage zu tun? Es ist Präsentationslogik, also würde ich die Sicht lieber nicht verschmutzen.

Antwort

16

könnten Sie verwenden slice:

{% for obj in list|slice:":5" %} 
    ... 
{% endfor %} 

<a href="" onclick="unhide()">Show hidden</a> 
<div id="hidden"> 
    {% for obj in list|slice:"5:" %} 
     ... 
    {% endfor %} 
</div> 
2

Sicher, zum Beispiel können Sie die Schleife zweimal tun und in ihm forloop.counter in geeigneten if Konstrukte verwenden - das erste Mal, Sachen nur tun, wenn es <= 5 ist, erst das zweite Mal, wenn es > 5 (weiß noch, es ist 1-basiert - - Wenn Sie einen 0-basierten verwenden möchten, verwenden Sie stattdessen forloop.counter0.

7

mit Vorlage Einschränkungen Struggling kann oft ein Zeichen dafür sein, dass das Leben einfacher sein könnte, wenn Sie mehr Arbeit in Ihrer Sicht tun

context = { 
    'visible_list': mylist[:5], 
    'hidden_list': mylist[5:] 
} 

Ich bin nicht Das ist zwar besser als die oben beschriebene Slice-Filter-Lösung, aber es ist oft eine Überlegung wert, wenn Sie Ihren Templates ein Kontext-Objekt übergeben, in dem alles gut eingerichtet ist. Sie können sich leichter anpassen, sollte die Logik später noch komplexer werden.

Präsentationslogik sitzt ziemlich gut in einer Ansicht. Ich sehe es nicht besonders als "Verschmutzung" an.

+1

Dieser Ansatz hat den zusätzlichen Vorteil, dass es sehr einfach ist, eine Bedingung in der Vorlage hinzuzufügen, um zu verhindern, dass "Versteckt anzeigen" angezeigt wird, wenn keine verborgenen Elemente vorhanden sind. –

Verwandte Themen