Python 如何从index.html中的模板返回appengine数据存储对象的键?
我希望我的用户能够通过单击每个对象旁边的按钮来修改显示的数据存储对象的属性 为了做到这一点,我认为当用户单击按钮时,我需要从index.html获取数据存储对象的id: 从index.html:Python 如何从index.html中的模板返回appengine数据存储对象的键?,python,google-app-engine,templates,post,request,Python,Google App Engine,Templates,Post,Request,我希望我的用户能够通过单击每个对象旁边的按钮来修改显示的数据存储对象的属性 为了做到这一点,我认为当用户单击按钮时,我需要从index.html获取数据存储对象的id: 从index.html: 然而,self.request.get(“id”)根本不返回任何内容。我认为polyhedron.key包含类似key(“polyhedron”,1)的内容。要仅获取对象ID,请尝试以下操作: {% for polyhedron in polyhedrons %} {{ polyhedron.
然而,self.request.get(“id”)根本不返回任何内容。我认为polyhedron.key包含类似key(“polyhedron”,1)的内容。要仅获取对象ID,请尝试以下操作:
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type=submit id="{{ polyhedron.key.id() }}" name=content value="red">
<input type=submit id="{{ polyhedron.key.id() }}" name=content value="green">
</form>
其中,多面体是您的模型名称。我认为Polyhedron.key包含类似于key(“Polyhedron”,1)的内容。要仅获取对象ID,请尝试以下操作:
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type=submit id="{{ polyhedron.key.id() }}" name=content value="red">
<input type=submit id="{{ polyhedron.key.id() }}" name=content value="green">
</form>
其中,多面体是您的模型名称。您混淆了HTML属性。当您这样做时:
self.request.get("foo")
它返回以“foo”作为“name”的HTML元素的值。因此,将您的HTML更改为:
<form action="/correction" method=post>
<input type=submit name="{{ polyhedron.key.id }}" value="red">
<input type=submit name="{{ polyhedron.key.id }}" value="green">
</form>
将返回id为123的颜色。您混淆了HTML属性。当您这样做时:
self.request.get("foo")
它返回以“foo”作为“name”的HTML元素的值。因此,将您的HTML更改为:
<form action="/correction" method=post>
<input type=submit name="{{ polyhedron.key.id }}" value="red">
<input type=submit name="{{ polyhedron.key.id }}" value="green">
</form>
将返回id为123的颜色。我将对对象的id使用隐藏输入。我不确定您是否正在使用或。如果您对对象使用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,则处理程序的模型为:
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')
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')
我会对对象的ID使用隐藏输入。我不确定您是否正在使用或。如果您对对象使用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,则处理程序的模型为:
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')
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')
如果使用db.model,这应该非常简单 首先,您不会使用输入标记的id请求值,而是使用名称 其次,正如Aaron提到的,您的用户不需要看到该键。把它藏起来 所以你的html应该是这样的
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type="hidden" name="key" value="{{polyhedron.key()}}">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="red">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="green">
</form>
class CorrectionHandler(webapp2.RequestHandler):
def post(self):
color = self.request.get("color")
polyhedron_key = self.request.get("key")
polyhedron_object = db.get(polyhedron_key)
if color == "red":
polyhedron_object.color = "red"
else:
polyhedron_object.color = "green"
polyhedron_object.put()
如您所见,我在其中使用了一些python代码,但如果您使用Java,则可以遵循相同的逻辑。我希望这会有所帮助如果您使用的是db.model,那么这应该非常简单 首先,您不会使用输入标记的id请求值,而是使用名称 其次,正如Aaron提到的,您的用户不需要看到该键。把它藏起来 所以你的html应该是这样的
{% for polyhedron in polyhedrons %}
{{ polyhedron.name }}
{{ polyhedron.color }}
<form action="/correction" method=post>
<input type="hidden" name="key" value="{{polyhedron.key()}}">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="red">
<input type="submit" id="{{ polyhedron.key().id() }}" name="color" value="green">
</form>
class CorrectionHandler(webapp2.RequestHandler):
def post(self):
color = self.request.get("color")
polyhedron_key = self.request.get("key")
polyhedron_object = db.get(polyhedron_key)
if color == "red":
polyhedron_object.color = "red"
else:
polyhedron_object.color = "green"
polyhedron_object.put()
如您所见,我在其中使用了一些python代码,但如果您使用Java,则可以遵循相同的逻辑。我希望这会有帮助谢谢!我用的是db。我认为,您的回答让我非常接近解决方案,但我在get_by_id()上遇到了一个错误:“BadArgumentError:应为(,)的实例或iterable;received 165(unicode)。”如果我将id强制转换为int或long,则会得到一个“None”对象。换句话说,我不知道如何确保id在返回时具有正确的类型。强制转换为整数不应返回无。您正在执行以下操作:polyhedron\u object=polyhedron.get\u by\u id(int(polyhedron\u object\u key))更改
polyhedron.key().id()
和polyhedron.key.id
,上述操作可能有效。请注意,Django模板变量中不允许使用括号。@AaronHampton是的,这正是我要做的,多面体是实体类。该对象在网页上显示时没有问题,并且它有一些属性,我可以在将其返回给处理程序时访问这些属性,但不知何故,当我尝试使用键cast to int从db检索对象时,该对象本身变成了“无”。@Kekito我使用的是jinja2,据我所知,它与parens一起工作得更好。谢谢!我用的是db。我认为,您的回答让我非常接近解决方案,但我在get_by_id()上遇到了一个错误:“BadArgumentError:应为(,)的实例或iterable;received 165(unicode)。”如果我将id强制转换为int或long,则会得到一个“None”对象。换句话说,我不知道如何确保id在返回时具有正确的类型。强制转换为整数不应返回无。您正在执行以下操作:polyhedron\u object=polyhedron.get\u by\u id(int(polyhedron\u object\u key))更改polyhedron.key().id()
和polyhedron.key.id
,上述操作可能有效。请注意,Django模板变量中不允许使用括号。@AaronHampton是的,这正是我要做的,多面体是实体类。该对象在网页上显示时没有任何问题,并且它具有一些属性,当我将其返回给处理程序时可以访问这些属性,但不知何故,当我尝试使用cast键将其从db检索到int时,该对象本身就变为“无”。@Kekito我使用的是jinja2,据我所知,它在Paren中工作得更好。