2017-10-06 75 views
0

我有一個塊如下:get_FOO_display等效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」如預期,但我怎麼得到它顯示作爲'黃'?

這些變化不工作(得不到任何輸出):

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

回答

0

不幸的是,不是直接等同 - 鶺鴒的塊機制將顯示名稱爲一個細節,那就是具體的編輯形式,而不是數據的一部分,所以在渲染模板時,他們不易訪問。我建議安排如下東西:

  • 在自己的模塊中定義選擇列表,它可以從多個地方導入 - 例如, 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' #} 
    
+0

謝謝,模板標籤是一個很好的解決方案。 – binadam