get_FOO_display 相当于 ChoiceBlock
get_FOO_display equivalent for ChoiceBlock
我有一个块如下:
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>
这会按预期显示 'Y',但如何让它显示为 'Yellow'?
这些变体不起作用(没有输出):
{{ value.get_choice_display }}
{{ value.bound_blocks.get_choice_display }}
不幸的是,没有直接的等效项 - 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' #}
我有一个块如下:
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>
这会按预期显示 'Y',但如何让它显示为 'Yellow'?
这些变体不起作用(没有输出):
{{ value.get_choice_display }}
{{ value.bound_blocks.get_choice_display }}
不幸的是,没有直接的等效项 - 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' #}