2009-08-15 5 views
1

Je sais que django ne permet pas d'avoir beaucoup de logique dans les templates. Cependant, vous devez parfois évaluer quelque chose et, en fonction de cela, changer vos options.Modèle Django pour la boucle: Comment effectuez-vous une action pour le premier enregistrement?

Comment modifier une valeur dans un modèle ou insérer un élément uniquement s'il s'agit du premier enregistrement? Mais vous aimeriez toujours faire le tour du reste. Par exemple, mon code modèle ci-dessous:

{% for object in object_list %} 
    <div id="t{{ object.id }}-header" class="content_headings title_highlight" >{{ object.title }}</div> 
    <div id="t{{ object.id }}-content"> 
     ...... 

code similaire dans un modèle de PHP:

<div id="t<?php if ($i != 1) { echo $i-1; } ?>-header" class="content_headings<?php if ($i == 1) { ?> title_highlight<?php } ?>" ><?php the_title(); ?></div> 
<div id="t<?php if ($i != 1) { echo $i-1; } ?>-content"> 
+0

Trouvé dans la documentation: {% if forloop.first%}, mais le code ne semble toujours pas fonctionner. – ismail

Répondre

7

forloop.first est le chemin à parcourir. Je pense que tout ce que vous devez faire est de changer légèrement la réponse de Tiago, et obtenir quelque chose comme ceci:

{% for object in object_list %} 
    <div id="t{% if not forloop.first %}{{ object.id }}{% endif %}-header" class="content_headings{% if forloop.first %} title_highlight{% endif %}"> 
     {{ object.title }} 
    </div> 
    <div id="t{% if not forloop.first %}{{ object.id }}{% endif %}-content"> 
{% endfor %} 

J'ai vérifié que contre votre code PHP et il semble être faire presque exactement la même chose (je ne prends pas 1 de {{ object.id }} car cela ne devrait pas faire de différence tant que les ID sont uniques, n'est-ce pas?)

+0

Merci, cela a fonctionné, bien que je pense qu'il peut y avoir un problème avec le JS, il ne sera pas mis en évidence. Donc actuellement en utilisant firebug pour comprendre pourquoi la version PHP fonctionne mais pas la version django – ismail

+0

Exécutez la sortie HTML du PHP et la sortie HTML du Django à travers un programme de comparaison de fichiers (FileMerge si vous êtes sous OS X), et voyez quelles sont les différences. Si le JS travaillait avec le HTML généré par PHP, il devait s'agir d'un problème HTML dans le template Django. Firebug vous donnera probablement la réponse par la suite. – user116170

+0

a obtenu le travail, merci pour l'aide. – ismail

2
{% for object in object_list %} 
<div id="t{{ object.id }}-{%if forloop.first%}header{%else%}content{%endif%}" class="content_headings title_highlight" >{{ object.title }}</div> 
... 
+0

Merci pour la réponse, tu le code PHP ne fait pas réellement ce que tu as ci-dessus. Le code PHP vérifie s'il s'agit de la première valeur, puis ajoute une nouvelle classe. Et il sort un ID pour toute valeur> 1 les! = -1 bits ... – ismail

+0

Salut Issy, Je suis désolé, mais je ne comprends pas ce que vous voulez faire et pourquoi le forloop.first ne fonctionne pas . Pourriez-vous clarifier? – Tiago

Questions connexes