2013-08-28 8 views
6

Mam szablon, w którym otrzymuję niektóre zmienne z powrotem. Jedną z zmiennych jest instance.category, która wyświetla: "słowa wyrazy", które są wartościami podzielonymi przez odstępy.Szablon Django dla pętli

Kiedy używam poniższego kodu, otrzymuję list po literze, a nie słowa.

{% for icon in instance.category %} 
    <p>{{ icon }}</p> 
{% endfor %} 

Wyjście

<p>w</p> 
<p>o</p> 
<p>r</p> 
<p>d</p> 
<p>w</p> 
.... 

muszę:

<p>word</p> 
<p>word</p> 
<p>word</p> 

Django kod wtyczki

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 = "Portfolio item" 
    render_template = "portfolio/item.html" 
    fieldsets = (
     (None, { 
      'fields': ('title', 'category',) 
     }), 
     (None, { 
      'fields': (('image', 'image_url',), 'alt_text',) 
     }), 
     (_('Image resizing options'), { 
      'fields': (
       'use_original_image', 
       ('width', 'height', 'crop', 'upscale'), 
       'use_autoscale', 
      ) 
     }), 
     (_('More'), { 
      'classes': ('collapse',), 
      'fields': (('free_link', 'page_link', 'file_link', 'original_link', 'target_blank'),) 
     }), 
    ) 

plugin_pool.register_plugin(PortfolioItemPlugin) 

Każda pomoc jest mile widziana!

+0

Czy możesz pokazać nam widok, aby rzucić okiem na kategorię? –

+0

Zastąpiliśmy wtyczkę FilerImage, aby dodać dodatkowe pole dla elementu portfela. Czy to ci pomoże (zaktualizowane)? –

Odpowiedz

12

Jeśli separator jest zawsze " " i category jest ciągiem, nie faktycznie potrzebują filtra niestandardowego szablonu. Możesz po prostu zadzwonić pod numer split bez parametrów:

{% for icon in instance.category.split %} 
    <p>{{ icon }}</p> 
{% endfor %} 
+0

To prawda! wielkie dzięki. –

+0

+1 ładnie i prosto! – alecxe

6

Przekazujesz ciąg znaków instance.category do szablonu, a następnie iterujesz po jego znakach.

Zamiast przekazać listę do szablonu: instance.category.split() który podzieli swój ciąg words words words do listy ['words', 'words', 'words']:

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

Lub można zdefiniować custom filter że będzie podzielić ciąg na liście :

from django import template 
register = template.Library() 

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

Następnie użyj go w szablonie w ten sposób:

{% for icon in instance.category|split %} 
    <p>{{ icon }}</p> 
{% endfor %} 
+0

Używam filtru niestandardowego, ale pojawia się ten błąd: instrukcje "dla" powinny używać formatu "dla x w y": dla ikony w instancji.category | split: "" jakichkolwiek pomysłów? –

+0

@NielsenRamon z pewnością, proszę zobaczyć zaktualizowaną odpowiedź. – alecxe

+0

Hmm wciąż ten sam błąd:/ –