Django ChoiceField:无法访问模板中的选项

时间:2011-07-10 05:34:33

标签: django forms templates choicefield

经过几个小时的努力,我对此感到沮丧。我只是不能在模板中循环我的ChoiceField选项。它甚至不会进入循环。但是,如果我使用pdb访问表单字段,它看起来很好。

我的表格:

MODE_CHOICES = (('blue', 'blue'), ('red', 'red'))

class MultiSearchForm(forms.Form):
    mode = forms.ChoiceField(required = True, widget = RadioSelect, choices = MODE_CHOICES)

我的观点:

class LandingPage(TemplateView):
    template_name = "landingPage.html"

    def get_context_data(self, **kwargs):
        context = super(LandingPage, self).get_context_data(**kwargs)
        context.update({
            'searchForm': MultiSearchForm(),
        })

        return context

我的模板:

<ul>

{% for choice in searchForm.mode.choices %} // for loop is not entered
  <li>
    <input type="radio" name="mode" value="{{choice.0}}"
      {% ifequal searchForm.mode.data choice.0 %}
        checked="checked"
      {% endifequal %}/>
  </li>
{% endfor %}
</ul

{{searchForm.mode.choices.0}} //no output

{{searchForm.mode}} // gives me 2 radio buttons

2 个答案:

答案 0 :(得分:2)

来自Django文档(https://docs.djangoproject.com/en/dev/ref/forms/widgets/):

Django 1.4中的新功能 - 为了更精细地控制生成的标记,您可以遍历模板中的单选按钮。假设一个带有字段披头士的表单myform使用RadioSelect作为其小部件:

  {% for radio in myform.beatles %}
  <div class="myradio">
      {{ radio }}
  </div>
  {% endfor %}

答案 1 :(得分:0)

你为什么这样做?您应该让字段输出自己,包括选定的字段。如果您需要设置其中一个选项,则应在视图或表单中使用initial参数执行此操作:

    context.update({
        'searchForm': MultiSearchForm(initial={'mode': your_choice}),
    })