404 Not Found(无法找到资源) - GAE和Datastore出现问题

时间:2014-06-10 05:10:31

标签: python google-app-engine google-cloud-datastore gql jinja2

我是Python,GAE和数据存储模型的新手。所以有很多我还不知道的事情,所以请耐心等待:)。

我正在开发一项网络服务,允许人们发布项目的“名称”和“描述”(描述),它将包含在同一页面的表格中。但是,当我单击提交按钮时,我收到错误:404 Not Found,找不到资源。

我期待在下面显示的代码中出现很多错误(我只包含我的代码的简短片段,我认为这些代码与使阅读更容易相关),而我最大的问题是我不知道哪个部件是错误的或要问的具体问题。但是我希望我能利用这个机会更多地了解我的代码(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 个答案:

答案 0 :(得分:1)

您的表单正在尝试使用/wishlist的网址发布到处理程序,但是您注册的POST方法的唯一处理程序是/promote

这些东西需要匹配。更改表单或处理程序映射。

同时,当您处于此状态时,请检查您的app.yaml是否合理。在您看到日志的同时查看日志,您将看到正在请求的URL。