2013-08-28 115 views
6

我有一個模板,我得到某些變量。 其中一個變量是instance.category,它輸出:「單詞單詞」,這些單詞是間隔分開的值。Django模板for循環

當我使用下面的代碼時,我收到了一封信,而不是單詞。

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

輸出

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

我需要:

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

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 = "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) 

任何幫助表示讚賞!

+0

您可以向我們展示查看類別的視圖嗎? – 2013-08-28 12:30:57

+0

我們重寫了FilerImage插件爲投資組合項目添加額外字段。這是否幫助你(更新)? –

回答

12

如果您的分隔符總是" "category是一個字符串,您實際上並不需要自定義模板過濾器。您可以簡單地撥打電話split,無參數:

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

這是對的!非常感謝。 –

+0

+1好而簡單! – alecxe

6

您正在將字符串instance.category傳遞到模板中,然後迭代它的字符。

取而代之的是,通過列表的模板:instance.category.split()將您words words words字符串分割成列表['words', 'words', 'words']

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

或者,你可以定義一個custom filter將一個字符串分割成列表:

from django import template 
register = template.Library() 

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

然後,用它在模板中是這樣的:

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

我正在使用自定義過濾器,但我得到這個錯誤:'for'語句應該使用格式'for x in y':for instance.category中的圖標| split:「」任何想法? –

+0

@NielsenRamon當然,請參閱最新的答案。 – alecxe

+0

嗯仍然是相同的錯誤:/ –