3

Dies ist hoffentlich eine ziemlich einfache Frage. Mein Endziel ist es, meine Datenbankeinträge in einer Tabelle anzeigen zu können, die ich über die Spaltenüberschriften sortieren kann. Ich habe die documentation auf Zyklus-Tags lesen, aber nicht wissen, dass sie damit meinen 'row1' und 'row2':Verwendung von Django Cycle Tag

{% for o in some_list %} 
    <tr class="{% cycle 'row1' 'row2' %}"> 
     ... 
    </tr> 
{% endfor %} 

Zweitens: Wie würde ich es richtig umzusetzen in meine Vorlage? Ich bin mit einem sehr einfachen JS library, was die Sortierung ermöglicht:

seite.html

{% if Variable %} 
    <table class="sortable"> 
     <tr> 
      <th>Title 1</th> 
      <th>Title 2</th> 
      <th>Title 3</th> 
      <th>Title 4</th> 
      <th>Title 5</th> 
     </tr> 
    {% for stuff in Variable %} 

     <tr class="{% cycle 'stuff' %}">  
      <td> 
       <a href="{% url 'detail_page' stuff.id %}"> 
       {{ stuff.Name|capfirst }}</a> 
      </td> 
     </tr> 
    {% endfor %} 
    </table> 
{% else %} 
    <p>No Results Found</p> 
{% endif %} 

mein models.py auf, falls Sie es:

def view(request): 
    Variable = database.objects.all() 
    context = { 
     'Variable': Variable, 
    } 
    return render(request, 'app/page.html', context) 

EDIT: Es scheint, dass ich die ganze Zeit den richtigen Code hatte, nur etwas ungleichmäßig angewendetes CSS, das meinen Tisch nicht wie einen Tisch aussehen ließ. Das Cycle-Tag wurde nicht benötigt, nur die for-Schleife. Es sah auch besser nach einer anderen Tabellenzeile hinzugefügt:

{% for stuff in Variable %} 
<tr> 
    <td>{{ stuff.Name|capfirst }}</td> 
    <td>{{ stuff.Number|capfirst }}</td> 
</tr> 
{% endfor %} 
+0

Ich glaube nicht, dass Sie das 'cycle' Tag hier verwenden möchten. Es wird nur zwischen einer Anzahl von Werten hin und her geschaltet, während der Forloop iteriert. Die "rows" in den Docs wechseln einfach zwischen zwei Klassennamen, jedes Mal wenn der Forloop läuft (dh bei der ersten Iteration, fügen Sie 'row1' als Klassenname, bei der zweiten Verwendung' row2', bei der dritten Verwendung 'row1', on hinzu die vierte 'row2' etc.) – rnevius

+0

Du hast absolut recht, ich sollte nicht. Ich nahm den Cycle-Tag mit, kreierte eine weitere Reihe und konnte sehen, wie mein Tisch "Form" annahm. Es scheint, ich hatte es die ganze Zeit, nur etwas ungleichmäßig angewandtes CSS, das es seltsam aussehen ließ. Kannst du mir auch kurz erklären, welche Klassennamen sind? Ich nehme an mit Zyklus, ich erstelle meine eigenen Variablen (row1 und row2). Ich bin sehr neu im Programmieren und im Selbstunterricht. – Kervvv

+0

Sie sind nur CSS-Klassennamen (Strings). Also würde der Code in den Docs zwischen 'class =" row1 "' und 'class =" row2 "' hin und her wechseln, während es Elemente in der Liste gibt. – rnevius

Antwort

4

Für den Zyklus-Tag werden die beiden Argumente abwechselnd mit der Vorlage hinzugefügt werden, zum Beispiel, würde der Code in Ihrer Vorlage {% for o in some_list %}<tr class="{% cycle 'row1' 'row2' %}"></tr>{% endfor %} erzeugen:

<tr class="row1"> 
    ... 
</tr> 
<tr class="row2"> 
    ... 
</tr> 
<tr class="row1"> 
    ... 
</tr> 
<tr class="row2"> 
    ... 
</tr> 
<!-- ... and so on while there are elements in some_list --> 

Und so weiter. Normalerweise würden Sie einige CSS dies zum Beispiel anbringt:

<style> 
    .row1 { 
     background: #345678; 
    } 
    .row2 { 
     background: #123456; 
    } 
</style> 

würde diese abwechselnden Reihen anderen Hintergrund geben Farben, zum Beispiel.

+0

Danke für die Klarstellung. Im Grunde sind 'row1' und 'row2' nur Strings? In dem Beispiel habe ich mindestens? – Kervvv

+0

Genau, sie sind nur Zeichenfolgen :), sie sind entworfen, um als Klassennamen verwendet werden, so dass Sie einige CSS-Styling an diese Klassen anhängen können und die alternativen Elemente für einander hervorstechen. Erleichtert das Lesen von Tabellen. – srowland

+0

Danke! Das macht jetzt viel mehr Sinn für mich! Ich wünschte ich könnte Upvotes geben, aber ich brauche mehr Rephaha. – Kervvv