2010-12-15 60 views
0

這裏對Django來說是比較新的,所以我不知道我是否只是沒有得到它或者這是一個錯誤。比方說,我有一個表格類:Django模板不能訪問表單字段,如果它在一個數組內

class SurveyTwo(forms.Form): 
    food = [forms.BooleanField(required=False, initial=False, label="Seafood")] 

然後,在相應的模板,我試圖通過鍵入

{{ form.food.0 }} 

當我這樣做,我讓我的頁面上訪問此:

<django.forms.fields.BooleanField object at 0x1c5b990> 

不是我正在尋找的「海鮮」複選框。我可以通過{{form.food.0.label}}來訪問標籤,但複選框只是以該字符串的形式出現。我應該能夠做到這一點?

基本上我想做的是將一個複選框數組傳遞給我的表單模板,而不是必須定義每個表單變量/字段。我想這樣做是因爲我要有大量的複選框,並希望能夠按照特定順序(使用2D數組)排列它們,而不是定義它們並手動將它們全部置於外面。如果我不能做到上述,有誰知道一個更簡單的解決方案?謝謝。

馬克

+0

它是一個Django的事情,你不說{場{forms.field [0]}} – verisimilidude 2010-12-15 21:54:46

+0

在模板中(至少在我的理解中),你必須使用一個。,即.0,.1,.2來訪問一個數組。就像我說的,{{form.food.0.label}}會輸出「Seafood」。 – marko 2010-12-15 22:29:44

回答

1

你可以簡單的模板標籤註冊:

from django import template 
register = template.Library() 

@register.simple_tag 
def bound_field(form, name): 
    """ returns bound field """ 
    return form.__getitem__(name) 

然後在模板中,您只需使用:

{% bound_field form <field_name> %} 

哪裏是字段的名稱。 如果你動態地生成的名字你不知道,你可以通過fields.keys訪問他們在這種情況下產生的所有字段將看起來像

{% for name in form.fields.keys %} 
    {% bound_field form name %} 
{% endfor %}