[英]Dynamically generate client-side HTML form control using JavaScript and server-side Python code in Google App Engine
我有以下使用Jinja2模板引擎的客户端前端HTML:
{% for record in result %}
<textarea name="remark">{{ record.remark }}</textarea>
<input type="submit" name="approve" value="Approve" />
{% endfor %}
因此,HTML可能显示多于1组的文本区域和提交按钮。
后端Python代码使用该模型从gql查询中检索可变数量的记录,并将其传递给结果Jinja2模板。 单击提交按钮后,它会触发post方法来更新记录:
def post(self):
if self.request.get('approve'):
updated_remark = self.request.get('remark')
record.remark = db.Text(updated_remark)
record.put()
但是,在某些情况下,更新的记录不是与单击的提交按钮相对应的记录(例如,如果用户单击记录1提交,则记录2的备注会更新,但记录1不会更新)。
我收集到这是由于重复的属性名称说明。 我可能可以使用JavaScript / jQuery生成不同的属性名称。 问题是,如何编码后端Python以获取JavaScript生成的(可变数量的)名称?
谢谢。
已编辑
在循环模板中,使用loop.index :循环的当前迭代。
然后:
{% for record in result %}
<textarea name="remark{{ loop.index }}">{{ record.remark }}</textarea>
<input type="submit" name="approve" value="{{ loop.index }}" />
{% endfor %}
返回:
<textarea name="remark1">first record remark</textarea>
<input type="submit" name="approve" value="1" />
<textarea name="remark2">second record remark</textarea>
<input type="submit" name="approve" value="2" />
<textarea name="remark2">third record remark</textarea>
<input type="submit" name="approve" value="3" />
并在您的后端代码中:
def post(self):
if self.request.get('approve'):
updated_remark = self.request.get('remark' + self.request.get('approve'))
record.remark = db.Text(updated_remark)
record.put()
我写了这个没有测试。 可能不起作用,但可以给您提示。
新的[更好]解决方案
将每两对textarea并输入一个表单内:
{% for record in result %}
<form>
<textarea name="remark">{{ record.remark }}</textarea>
<input type="submit" name="approve" value="Approve" />
</form>
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.