繁体   English   中英

使用JavaScript和Google App Engine中的服务器端Python代码动态生成客户端HTML表单控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM