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

标签 javascript python google-app-engine

我有以下使用 Jinja2 模板引擎的客户端前端 HTML:

{% for record in result %}
    <textarea name="remark">{{ record.remark }}</textarea>
    <input type="submit" name="approve" value="Approve" />
{% endfor %}

因此 HTML 可能会显示多于一组的文本区域和提交按钮。

后端 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 生成的(可变数量的)名称?

谢谢。

最佳答案

已编辑

在模板for循环中使用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()

我写这个没有测试它。可能不起作用,但可以给你一个提示。

<小时/>

新的[更好]解决方案

将每对文本区域和输入放入表单中:

{% for record in result %}
    <form>
        <textarea name="remark">{{ record.remark }}</textarea>
        <input type="submit" name="approve" value="Approve" />
   </form>
{% endfor %}

关于javascript - 在 Google App Engine 中使用 JavaScript 和服务器端 Python 代码动态生成客户端 HTML 表单控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340220/

相关文章:

javascript - 在外部 javascript 中检测 jQuery off()

javascript - 如何使用 spin.js 显示页面加载指示器

python - 我可以从 C main() 程序返回一个字符串吗

python - concurrent.futures 和 POSIX Linux 中异步 I/O 的区别

google-app-engine - 我可以在我的本地开发服务器上使用 gsutil 吗?

google-app-engine - 如何在 GAE 运行时记录消息?

javascript - 将 MongoDB 服务器数据同步到 IndexedDB 本地存储

python - Probema 使用 tkinter 从 sqlite 中删除

MySQL 经常消失

javascript - Ember.js 类型错误 : parent is null