我有一个模板,我可以获得某些变量。 一个变量是instance.category,它输出:“单词单词单词”,它们是按间隔分割的值。
当我使用下面的代码时,我会逐字回信,而不是单词。
{% 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 :(得分:14)
如果您的分隔符始终为" "
且category
为字符串,则实际上您不需要自定义模板过滤器。您只需拨打split
,无需参数:
{% for icon in instance.category.split %}
<p>{{ icon }}</p>
{% endfor %}
答案 1 :(得分: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 %}
答案 2 :(得分:0)
我知道这是一个迟到的答案,但它可能对某人有所帮助(这是我遇到的问题)。 如果你有一个点的形式:(x, y)。那么你需要:
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}
对于键值对:
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
来源:here(检查部分)