18 votes

{% pour élément dans liste %} <p>{{ élément }}</p> {% endfor %}

J'ai un modèle où je reçois certaines variables en retour. Une variable est instance.category qui affiche: "mots mots mots" qui sont des valeurs séparées par des espaces.

Lorsque j'utilise le code ci-dessous, je reçois des lettres par lettres et non des mots.

{% for icon in instance.category  %}
  {{ icon }}
{% endfor %}

Sortie

w
o
r
d
w
....

J'ai besoin:

mot
mot
mot

Le code du plugin Django

from cmsplugin_filer_image.cms_plugins import FilerImagePlugin
from cms.plugin_pool import plugin_pool
from django.utils.translation import ugettext_lazy as _
from models import Item

class PortfolioItemPlugin(FilerImagePlugin):
    model = Item
    name = "Article de portfolio"
    render_template = "portfolio/item.html"
    fieldsets = (
        (None, {
            'fields': ('title', 'category',)
        }),
        (None, {
            'fields': (('image', 'image_url',), 'alt_text',)
        }),
        (_('Options de redimensionnement de l'image'), {
            'fields': (
                'use_original_image',
                ('width', 'height', 'crop', 'upscale'),
                'use_autoscale',
            )
        }),
        (_('Autres'), {
            'classes': ('collapse',),
            'fields': (('free_link', 'page_link', 'file_link', 'original_link', 'target_blank'),)
        }),
    )

plugin_pool.register_plugin(PortfolioItemPlugin)

Toute aide est appréciée!

25voto

Augusto Men Points 1731

Si votre séparateur est toujours " " et que category est une chaîne de caractères, vous n'avez pas vraiment besoin d'un filtre de modèle personnalisé. Vous pourriez simplement appeler split sans paramètres :

{% for icon in instance.category.split %}
  {{ icon }}
{% endfor %}

7voto

alecxe Points 50783

Vous transmettez une chaîne instance.category au modèle, puis vous itérez sur ses caractères.

Au lieu de cela, transmettez une liste au modèle : instance.category.split() qui va diviser votre chaîne words words words en la liste ['words', 'words', 'words']:

>>> s = "words words words"
>>> s.split()
['words', 'words', 'words']

Ou, vous pouvez définir un filtre personnalisé qui va diviser une chaîne en liste :

from django import template
register = template.Library()

@register.filter
def split(s, splitter=" "):
    return s.split(splitter)

Ensuite, utilisez-le dans le modèle de cette façon :

{% for icon in instance.category|split %}
    {{ icon }}
{% endfor %}

1voto

Maubeh Points 313

Je sais que ma réponse est tardive, mais elle pourrait aider quelqu'un (c'était le problème que j'avais). Si vous avez un point sous la forme : (x, y), alors vous avez besoin de :

{% for x, y in points %}
    Il y a un point à {{ x }},{{ y }}
{% endfor %}

Et pour les paires clé-valeur :

{% for key, value in data.items %}
    {{ key }} : {{ value }}
{% endfor %}

source : ici (consultez la section for)

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