1

我希望我的用户能够通过单击每个对象旁边的按钮来修改显示的数据存储对象的属性。

为了做到这一点,我相信当用户单击按钮时,我需要从 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") 根本不返回任何内容。

4

4 回答 4

2

我会为对象的 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')
于 2013-03-07T23:11:19.597 回答
1

我认为 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>

然后在您的处理程序中再次构建密钥:

class CorrectionHandler(webapp2.RequestHandler):
    def post(self):
        polyhedron_object = self.request.get("id")
        polyhedron__key = ndb.Key('Polyhedron', self.request.get('id'))
        polyhedron_object.color = self.request.get('content')

Polyhedron 是您的模型名称。

于 2013-03-07T22:26:28.573 回答
1

您正在混淆您的 HTML 属性。当你这样做时:

self.request.get("foo")

它返回以“foo”作为“名称”的 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>

进而

self.request.get("123")

将返回 id 为 123 的颜色。

于 2013-03-07T22:49:52.433 回答
0

如果您使用的是 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,则可以遵循相同的逻辑。我希望它有帮助

于 2013-05-03T01:35:57.647 回答