50 votes

Construire une liste dans les modèles Django

Avec ce code :

 {% for o in [1,2,3] %}
    <div class="{% cycle 'row1' 'row2' %}">
        {% cycle 'row1' 'row2' %}
    </div>
{% endfor %}

J'obtiens un TemplateSyntaxError :

 Could not parse the remainder: '[1,2,3]' from '[1,2,3]'

Existe-t-il un moyen de créer une liste dans un modèle ?

74voto

Zulu Points 1471

Nous pouvons utiliser la méthode split sur l'objet str :

page.html :

 {% with '1 2 3' as list %}
  {% for i in list.split %}
    {{ i }}<br>
  {% endfor %}
{% endwith %}

Résultats :

 1
2
3

33voto

Dominic Rodger Points 44489

Vous pouvez le faire en utilisant astucieusement le make_list , mais c'est probablement une mauvaise idée :

 {% for o in "123"|make_list %}
    <div class="{% cycle 'row1' 'row2' %}">
        {% cycle 'row1' 'row2' %}
    </div>
{% endfor %}

ps Vous ne semblez pas utiliser o nulle part, donc je ne suis pas sûr de ce que vous essayez de faire.

24voto

rabbit.aaron Points 16

C'est probablement un peu trop tard maintenant. J'ai créé cette balise de modèle pour atteindre cet objectif.

 from django import template
register = template.Library()

# use @register.assignment_tag
# only when you're working with django version lower than 1.9
@register.simple_tag
def to_list(*args):
    return args

pour l'utiliser dans le modèle :

 {% load your_template_tag_file %}
{% to_list 1 2 3 4 5 "yes" as my_list %}
{% for i in my_list %}
    {{ i }}
{% endfor %}

Référence ici : Balises d'affectation Django

6voto

Jonathan Liuti Points 666

Le plus simple est de faire

 {% for x in "123" %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X