404 未找到(资源无法找到)- GAE 和 Datastore 的问题

-3 投票
1 回答
2073 浏览
提问于 2025-04-18 09:14

我刚开始学习Python、GAE和数据存储模型,所以有很多东西我还不太懂,请多多包涵 :)

我正在做一个网络服务,允许用户发布一个物品的“名称”和“描述”,然后这些信息会显示在同一页面的表格中。但是,当我点击提交按钮时,出现了错误:404 找不到,资源无法找到。

我觉得我的代码可能有很多问题(我只包含了我认为相关的简短代码片段,以便更容易阅读),我最大的问题是我不知道哪些部分是错的,也不知道该问哪些具体的问题。不过,我希望能借这个机会多了解一下我代码中涉及的所有内容(比如Jinja、HTML、GQL等),以及如何把它们结合在一起。

    class Events(ndb.Model):
        name = ndb.StringProperty()
        desc = ndb.StringProperty()

    class Promote(webapp2.RequestHandler):
        def get(self):
            query = ndb.gql("SELECT * "
                            "FROM Events "
                            )
            template_values = {"events" : query,}
            template = jinja_environment.get_template('promote.htm')
            self.response.out.write(template.render(template_values))

        def post(self):
            event = Events(name = self.request.get('name'), desc = self.request.get('desc'))
            event.put()
            self.redirect('/promote')


    app = webapp2.WSGIApplication([('/', Main),
                                   ('/publicsearch', PublicSearch),
                                   ('/promote', Promote)],
                                  debug=True)

这是我那一页的HTML代码。

<div class="jumbotron">
<div class = "container">
   <form action="/promote" method="post">
    <fieldset>
        <div class="row-fluid">
            <p> Promote your event here! </p>

            <div class="row-fluid">
                <div class="span6">
                    <p> Name of event: <br>
                        <textarea class="input-block-level" name="name" rows="1" cols = "50"> </textarea></p>
                    <p> Event description: <br>
                        <textarea class="input-block-level" name="desc" rows="3" cols = "50"> </textarea></p>

                        <p><input type="submit" value="Submit">
                </div>
            </div>
        </div>
    </div>
</div>

    <h4> Events feed </h4>
    <table class="table table-bordered table-striped">
        <thead>
            <tr>
                <th width="30%">Name</th>
                <th>Description</th>
            </tr>
        </thead>
        <tbody>
            {% for event in events %}
            <tr>
                <td>{{ event.name }} </td>
                <td>{{ event.desc }}  </td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>

1 个回答

2

你的表单试图发送数据到一个地址是 /wishlist,但是你注册的唯一一个可以处理发送数据的地址是 /promote

这两个地址需要一致。你要么改一下表单,要么改一下处理程序的地址。

顺便检查一下你的 app.yaml 文件,看看里面的设置是否正确。同时查看一下日志,你会看到请求的是哪个地址。

撰写回答