我希望我的用户能够通过单击每个对象旁边的按钮来修改显示的数据存储对象的属性。
为了做到这一点,我相信我需要在用户单击按钮时从 index.html 中获取数据存储对象的 ID:
来自 index.html:
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type=submit id="{{ polyhedron.key }}" name=content value="red">
<input type=submit id="{{ polyhedron.key }}" name=content value="green">
</form>
处理程序:
class CorrectionHandler(webapp2.RequestHandler):
def post(self):
polyhedron_object = self.request.get("id")
polyhedron_object.color = self.request.get('content')
但是,self.request.get("id") 根本不返回任何内容。
最佳答案
我会为对象的 ID 使用隐藏的输入。我不确定你是否使用 db.Model或 ndb.Model .如果你为你的对象使用 db.Model,我会这样做:
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type="hidden" name="key" value="{{ polyhedron.key().id() }}">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="red">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="green">
</form>
如果你正在使用 ndb.Model,我会这样做
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type="hidden" name="key" value="{{ polyhedron.key.urlsafe() }}">
<input type="submit" id="{{ polyhedron.key.urlsafe() }}" name="color" value="red">
<input type="submit" id="{{ polyhedron.key.urlsafe() }}" name="color" value="green">
</form>
如果您使用 db.Model,您的处理程序是:
class CorrectionHandler(webapp2.RequestHandler):
def post(self):
polyhedron_object_key = self.request.get("key")
polyhedron_object = Polyhedron.get_by_id(polyhedron_object_key)
polyhedron_object.color = self.request.get('color')
如果您使用的是 ndb.Model,您的处理程序是:
class CorrectionHandler(webapp2.RequestHandler):
def post(self):
polyhedron_object_key = self.request.get("key")
polyhedron_object = ndb.Key(urlsafe=polyhedron_object_key).get()
polyhedron_object.color = self.request.get('color')
关于python - 如何从 index.html 中的模板返回 appengine 数据存储对象的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15282582/