我有一个成员列表,来自jinja2中的for循环,带有select和option
我希望能够从for循环中选择一个成员, 并将该成员添加到事件的另一个条目列表中,并为用户提供额外选项。 (获取成员很容易,从按钮的值,获取选项是问题)
例如:
Jinja2模板:
<form method="post" action="add_member_to_list">
<table>
{% for member in members %}
<tr>
<th>{{ member.name }}</th>
<td><input type="checkbox" name="in_out"></td>
<td><select name="day">
<option>Monday</option>
<option>Wednesday</option>
</select>
</td>
<td><button type="submit" name="id" value="{{ member.id }}">Add</button></td>
</tr>
{% endfor %}
</table>
</form>
Google App Engine中的- Python
class AddUser(BaseHandler):
def post(self):
in_out = self.request.get("in_out")
id = self.request.get("id")
day = self.request.get("day")
在这种情况下,self.response.get(“day”)只返回为for循环的第一次迭代选择的选项。
复选框; self.request.get(“in_out”),按预期返回或关闭。
所以提交for循环的第n次迭代: 始终从select / option返回“Monday”。
如何获得与for循环的第n次迭代相对应的select /选项?
谢谢!
答案 0 :(得分:1)
最简单的解决方案是将表单标记移动到for循环中
<table>
{% for member in members %}
<form method="post" action="add_member_to_list">
<tr>
<th>{{ member.name }}</th>
<td><input type="checkbox" name="in_out"></td>
<td><select name="day">
<option>Monday</option>
<option>Wednesday</option>
</select>
</td>
<td><button type="submit" name="id" value="{{ member.id }}">Add</button></td>
</tr>
</form>
{% endfor %}
</table>
答案 1 :(得分:0)
因此,您的结果表单有多个具有相同名称的字段,对吧?
与第一个成员一样,有一个和第二个成员,还有一个?
如果是这样,表单不支持。您必须为每个字段指定唯一的名称。你必须在循环的每次迭代中抛出一个memberID,或者想出一个更好的设计。像<select name="day{{member.id}}">
这样的东西会是一个黑客修复。
另一种方法是让你离开for循环的in_out和day OUT,把它放在外面。
我希望有所帮助。
答案 2 :(得分:0)
我找到了一个非常简单的解决方案:
而不是
day = self.request.get("day")
我用过
day = self.request.get_all("day")
返回select中所有选项的列表,包括用户为该成员选择的选项。
然后,对于添加按钮,而不是
<td><button type="submit" name="id" value="{{ member.id }}">Add</button></td>
我指定了名称&#34; loop&#34;值{{loop.index0}}
所以,
self.request.get("loop")
返回所选成员的位置,对应目标日期列表中的位置。瞧。
我从隐藏的td而不是从提交按钮获取的成员。
最终代码:
<form method="post" action="add_member_to_list">
<table>
{% for member in members %}
<tr>
<th>{{ member.name }}</th>
<td><input type="checkbox" name="in_out"></td>
<td>
<select name="day">
<option>Monday</option>
<option>Wednesday</option>
</select>
</td>
<td class="hidden"><input name="id" value="{{ member.id }}"></td>
<td><button type="submit" name="loop" value="{{ loop.index0 }}">Add</button></td>
</tr>
{% endfor %}
</table>
</form>
class AddUser(BaseHandler):
def post(self):
day = self.request.get_all("day")
id = self.request.get_all("id")
loop = self.request.get("loop")
target_day = day[int(loop)]
target_id = id[int(loop)]
Niiice。