2010-12-15 57 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 %}