是否可以关闭,然后重新打开/继续页面上的html表单?基本上我有一个spreadsheet-esk web front从数据库中提取数据。但是,我被要求将字段分成左边的div和右边的div。原因是他们想要在右边div上有一个水平滚动条,因为它包含更多的字段,然后是左边的div(左边的div字段就像没有滚动条的静态字段),这是为了复制现有电子表格的外观。
我决定在我的模板中使用两个for循环来完成此操作。第一个循环生成页面的左侧,然后我关闭左侧div,第二个循环生成页面的右侧,然后我关闭右侧div。
由于我这样做的方式,我有一个问题,我在关闭第一个表单之前有很多表单元素。
<div left>
<% for bla in bla %}
<form id="{{ bla.id }}"><submit>
<input value="{{ bla.name}}"><input value="{{ bla.number }}">
{% endfor %}
</div>
<div right>
{% for bla2 in bla2 %}
<input value="{{ bla2.address}"><input value="{{ bla2.state }}">
</form>
{% endfor %}
</div>
显然我遇到了问题,因为当您查看由上面类似的代码生成的html时,您有许多在生成第二个div之前不会关闭的表单元素。所以我的POST数据始终是最后一条记录。
我尝试了什么,我给了表单一个名字和ID,{{bla.id}}。然后我在第一个循环中关闭表单,并在第二个循环中添加一个具有相同id和名称{{bla.id}}的新标记。
我认为页面会知道这个表单是以前表单的延续,但是它不起作用,我似乎无法找到解决方法。
也许我的整个逻辑都是关闭的,我应该以不同的方式生成整个页面。也许有一个我想念的简单解决方案......
我希望我解释得那么好。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:0)
[编辑]
从评论中,如果您想为每条记录设置一个提交按钮,您仍然可以使用下面列出的标记,将每个表单标记循环为“行”。对象名称blah
和blah2
有些误导,特别是如果所有字段都包含单个模型。
如果字段实际上是同一模型的所有部分,则for循环将简单地移动到表单标记之外,而不是在每个“列”中。
如果您不想手动输出字段,另一个选项是使用模型formset来生成模型表单的多个实例。您的标记几乎与下面概述的标记完全相同,但您可以在formset循环之外为formset的管理表单添加额外的字段。
示例:
<form action="." method="post" enctype="application/x-www-form-urlencoded">
<div id="left_column">
<fieldset>
{% for bla in blah %}
<input name="name" value="{{ bla.name}}" />
<input name="number" value="{{ bla.number }}" />
{% endfor %}
</fieldset>
</div>
<div id="right_column">
<fieldset>
{% for bla2 in blah2 %}
<input name="address" value="{{ bla2.address}" />
<input name="state" value="{{ bla2.state }}" />
{% endfor %}
</fieldset>
</div>
<input type="submit" value="Submit" />
</form>
您的每个表单元素都需要一个name属性,否则您将无法在request.POST QueryDict中找到它们。表单标记必须包含您希望作为POST的一部分提交的所有元素,除非您通过JavaScript进行POST并通过JavaScript收集值。