【问题标题】:404 Not Found (The resource could not be found) - Trouble with GAE and Datastore404 Not Found(找不到资源) - GAE 和数据存储出现问题
【发布时间】:2023-04-04 00:13:01
【问题描述】:

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

我正在开发一项网络服务,该服务允许人们发布项目的“名称”和“描述”(描述),并将其包含在同一页面的表格中。但是,当我单击提交按钮时,出现错误:404 Not Found, The resource could not be found.

我预计下面显示的代码中会有很多错误(我只包含我的代码的简短 sn-ps,我认为这与使其更易于阅读有关),我最大的问题是我没有知道哪些部分是错误的或要问哪些具体问题。但我希望我能借此机会更多地了解我的代码中涉及的所有内容(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>

【问题讨论】:

  • 您应该尝试构建您的问题,以便只提出一个问题。如果您想要进行一般代码审查,还有其他 stackexchange 地方可以做到这一点。

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


【解决方案1】:

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

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

同时检查您的app.yaml 是否有意义。查看日志时,您会看到请求的 URL。

【讨论】:

  • 啊,谢谢!我粗心。我刚刚将表单更改为发布到 /promote。输入的数据也成功存储到数据存储中。但是现在当我点击“提交”按钮时,它会导致一个空白页面?
  • 您现在需要进行一些调试。在你的 get 方法中为提升处理程序添加一些日志记录,看看发生了什么。检查重定向是否正常工作等.....
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2018-04-08
  • 2020-01-28
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
相关资源
最近更新 更多