2010-01-27 5 views
4

J'ai les éléments suivants dans mon modèle.Problème de modèles Django - {% si objet | longueur> 4%} augmente TemplateDoesNotExist: 500.html

{% block content %} 
    {% for album in albumsList %} 
     {% if fotosList %} 
      <div class="photoalbum-wrapper"> 
       <h3>{{ album.title }}</h3> 
       <ul class="photoalbum"> 
        {% for foto in fotosList %}<li>item</li>{% endfor %} 
       </ul> 
       {% if fotosList|length > 4 %} 
        <a href="#" class="trigger">больше <span>&#9660;</span></a> 
       {% endif %} 
      </div> 
     {% endif %} 
    {% endfor %} 
{% endblock %} 

Et il soulève TemplateDoesNotExist: 500.html.

Si j'écris simplement {{ fotoList|length }} cela fonctionne bien.

Répondre

2

{% if fotosList|length > 4 %} n'est pas une balise valide; vous ne pouvez pas utiliser des opérateurs supérieurs à/inférieurs à la balise Django if. (Vous pouvez utiliser operators dans la dernière version de développement, mais je suppose que vous n'êtes pas en utilisant la dernière version du référentiel SVN de Django.)

La raison pour laquelle vous obtenez l'erreur TemplateDoesNotExist est parce que Django est de lancer un 500 Erreur interne du serveur (en raison de l'étiquette non valide), mais vous n'avez pas fourni de modèle d'erreur 500.html, comme indiqué here.

2

FYI si balises avec les opérateurs ==,! =, <,>, < =,> = sont maintenant pris en charge dans la version de développement de Django.

5

Utilisez fotosList.count au lieu de fotosList|length. vous obtiendrez le résultat souhaité.

+0

Cela suppose 'fotosList' est un nombre' QuerySet' ou quelque chose d'autre qui met en œuvre '()' –

+0

Cela ne fonctionnera pas avec les collections, les listes de tuples, etc. –

2

Ceci est une très vieille question. Depuis que les nouvelles versions de support Django operators in if-statement de la boîte, de sorte que le code suivant fonctionne très bien:

{% if fotosList|length > 4 %} 

{% endif %}