【问题标题】:Display a grid radio form with Django Forms or Django Floppyforms使用 Django Forms 或 Django Floppyforms 显示网格单选表单
【发布时间】:2012-02-02 09:18:51
【问题描述】:

我想用这种网格制作一个表格:

你知道我该怎么做吗?有没有一个 Django Form 小部件?

实际上它是具有相同选择列表的问题,在网格中显示为单选。

谢谢,

纳蒂姆

【问题讨论】:

  • 在这种情况下,我会毫不犹豫地使用纯 html,并且只需 {% if form.data.email == 'daily' %}checked=checked{% endif %} 在无线电输入标签中。一路亲吻。
  • 所以你会做一个包含模板标签,标题(选项)和字段作为参数?
  • 对于第一个网格,我肯定会在表单模板中进行硬编码。对于第二个网格:包含模板标签听起来是个好主意(为什么不使用 django-native-tags)。至于参数,有一件事是肯定的:您需要选择字段(构建行),但您可以从字段(field.choices)中推断出选择(构建列)。所以看起来这样的签名会起作用 {% my_inc_tag form 'email,newsletter,etc...' %}。当然,包含函数必须准备包含模板所需的上下文。这不是直截了当,但有可能。

标签: django forms django-forms django-floppyforms


【解决方案1】:

我会使用 django 表单来执行此操作,网格上每行一个字段,ChoiceField 和 RadioSelect 作为小部件:

line1 = forms.ChoiceField(widget=forms.RadioSelect, choices=TRUC)
line2 = …

然后你需要找到模板布局来正确渲染它。 RadioSelect 生成一个 <ul>,其中 eahc 选择为 <li>。选择标签包含在<li> 中,这不是您想要的。

使用 floppyforms,您可以继承 RadioSelect 并给它一个自定义模板名称(查看 floppyforms/radio.html 模板)以省略标签。您还可以更改它以呈现表格单元格 (<td>s) 而不是 <li>,并让您的表单标记生成一个带有表格标题中标签的表格。

import floppyforms as forms

class RadioSelect(forms.RadioSelect):
    template_name = 'myforms/radio.html'

将您想要的行标记放在上面的模板中。

然后,在呈现表单的模板中:

<form method="post" action="youraction">
  <table>
    <thead>
      <td> <!-- put your form headers here --> </td>
    </thead>
    <tbody>
      {% for field in form %}
        <tr>
          <td>{{ field.label_tag }}</td>
          {{ field }}
        </tr>
      {% endfor %}
    </tbody>
  </table>
<!-- submit button -->
</form>

那么只需应用几个 CSS 样式即可获得所需的布局:)

【讨论】:

    【解决方案2】:

    你可以试试这个字段django-radiogrid

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 2015-01-15
      • 2015-10-22
      • 2015-01-07
      • 2015-05-13
      • 2011-03-13
      • 2011-01-23
      • 1970-01-01
      相关资源
      最近更新 更多