【问题标题】:Django ChoiceField: Fail to access choices in templateDjango ChoiceField:无法访问模板中的选项
【发布时间】:2011-10-02 03:16:24
【问题描述】:

在尝试了几个小时后,我对此感到沮丧。我只是无法在模板中循环我的 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

【问题讨论】:

    标签: django forms templates choicefield


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,我需要自定义单选按钮的外观,这不是设置初始值。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2012-01-15
      • 2015-03-02
      • 2018-02-14
      • 2012-07-05
      相关资源
      最近更新 更多