我有一个块如下:
class SomeBlock(blocks.StructBlock):
choice = blocks.ChoiceBlock(choices=(('Y', 'Yellow'), ...))
# more fields
class Meta:
template = 'myapp/blocks/some_block.html'
在我的模板中,我有:
{% load wagtailcore_tags %}
<div>{{ value.choice }}</div>
这将显示&#39; Y&#39;正如所料,但如何让它显示为&#39;黄色&#39;?
这些变化不起作用(没有输出):
{{ value.get_choice_display }}
{{ value.bound_blocks.get_choice_display }}
答案 0 :(得分:0)
不幸的是,没有直接等效 - Wagtail的块机制将显示名称视为特定于编辑表单的细节,而不是数据的一部分,因此他们可以将这些显示名称视为特定于编辑表单的细节。在您渲染模板时无法轻松访问。我建议安排如下事项:
在自己的模块中定义选项列表,可以从多个位置导入 - 例如的myapp / colors.py:
COLORS = (('Y', 'Yellow'), ...)
COLORS_LOOKUP = dict(COLORS) # gives you a dict of the form {'Y': 'Yellow', ...}
更新ChoiceBlock定义以引用其中定义的列表:
from myapp.colors import COLORS
class SomeBlock(blocks.StructBlock):
choice = blocks.ChoiceBlock(choices=COLORS)
创建自定义模板标记以从值中进行查找以显示名称 - 例如的myapp / templatetags / color_tags.py:
from django import template
from myapp.colors import COLORS_LOOKUP
register = template.Library()
@register.simple_tag
def get_color_display_name(name):
return COLORS_LOOKUP.get(name)
在模板中使用此标记:
{% load color_tags %}
...
{% get_color_display_name value.choice %} {# to output it immediately #}
{% get_color_display_name value.choice as label %} {# to assign it to the variable 'label' #}