1

我有一个块如下:

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”,但我如何让它显示为“黄色”?

这些变体不起作用(没有输出):

{{ value.get_choice_display }}
{{ value.bound_blocks.get_choice_display }}
4

1 回答 1

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' #}
    
于 2017-10-06T20:08:13.120 回答