2013-08-28 26 views
6

Belirli değişkenleri geri aldığım bir şablonum var. Tek bir değişken, çıktıları olan örnek: "kelimeler sözcükleri", aralıklarla bölünmüş değerlerdir.Döngü için Django şablonu

Aşağıdaki kodu kullandığımda, kelimeleri değil, geri mektupla mektup alıyorum.

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

Çıktı

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

ihtiyacım var: Herhangi bir yardım takdir

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

Django eklentisi kodu

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

Bize kategoriye göz atmak için görünümü gösterebilir misiniz? –

+0

Bir portföy öğesi için ek alan eklemek için FilerImage eklentisini geçersiz kıldık. Bu size yardımcı olur mu (güncellendi)? –

cevap

12

Ayracınız her zaman " " ve category bir dizeyse, aslında özel bir şablon filtresine ihtiyacınız yoktur. split'u hiçbir parametreyle çağırmanız yeterlidir:

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

Bu doğru! çok teşekkürler. –

+0

+1 güzel ve basit! – alecxe

6

Dizeye bir instance.category dizgisini geçiriyorsunuz ve ardından karakterleri üzerinde yinelemektasınız. listeye ['words', 'words', 'words'] içine words words words dize bölecek instance.category.split(): Yerine

, şablona bir listesini iletmek

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

Veya, listeye bir dize bölecek bir custom filter tanımlayabilirsiniz : Sonra

from django import template 
register = template.Library() 

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

şablonda bu şekilde kullanın:

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

Özel filtreyi kullanıyorum ancak şu hatayı alıyorum: 'for' ifadeleri 'for x in y' biçiminde kullanılmalıdır: icon in example.category | split: "" herhangi bir fikir mi? –

+0

@NielsenRamon, lütfen güncellenmiş cevabı gör. – alecxe

+0

Hmm hala aynı hata:/ –

İlgili konular