【问题标题】:Django hidden input being rendered as <td> in htmlDjango 隐藏输入在 html 中呈现为 <td>
【发布时间】:2022-10-06 11:58:27
【问题描述】:

我正在使用模型表单集来允许用户在他们餐厅的菜单上添加/编辑/删除食物项目。

FoodItemFormset = modelformset_factory(FoodItem, fields = \'__all__\', can_delete = True)

然后,我将遍历模板中的所有表单并将它们显示在表格中:

  <table>
    <tr>
      <th>Food Item</th>
      <th></th> <!-- empty <th> lines up with hidden input field -->
      <th>Delete</th>
    </tr>
    {% for form in food_formset  %}
      <tr>
        {% for field in form %}
          <td>{{ field }}</td>
        {% endfor %}
      </tr>
    {% endfor %}
  </table>
  <input type=\"submit\" name=\"\" value=\"Submit\">

但是,can_delete 属性不仅会导致复选框被渲染,它还会将包含对象 id 的隐藏字段渲染为实际的表格元素,从而导致表格内容之间出现空白。

<td><input type=\"text\" name=\"form-0-name\" value=\"Mozzarella Sticks\" maxlength=\"200\" id=\"id_form-0-name\"></td>
<td><input type=\"hidden\" name=\"form-0-id\" value=\"2\" id=\"id_form-0-id\"></td> <!-- this just looks like an empty gutter -->
<td><input type=\"checkbox\" name=\"form-0-DELETE\" id=\"id_form-0-DELETE\"></td>

有没有办法解决这个问题?谢谢你的帮助。

    标签: django django-templates


    【解决方案1】:

    循环 form.visible_fields 以仅包含可见字段。

    {% for field in form.visible_fields %}
      <td>{{ field }}</td>
    {% endfor %}
    

    您还需要渲染隐藏字段,但这不需要在它自己的表格单元格中。

    {% for hidden in form.hidden_fields %}
      {{ hidden }}
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多