谷歌应用引擎上的空白屏幕错误

时间:2014-06-20 14:07:32

标签: python html google-app-engine google-cloud-datastore

我正在尝试这个想法,其中有一个'事件的表格。在' /搜索'页面和当'' GO'按下一个事件按钮,它将增加“回复”按钮。该事件的计数,并重定向回' / search'。但是,当我点击“GO'在我的应用程序中的按钮,它会导致一个空白屏幕,其中包含url&localhost:8080 / rsvp'。

发现它很奇怪,并想知道我的代码的哪一部分是错误的。以下是我认为导致错误的代码的一些相关部分。

这是python文件中的代码:

class RSVPItem(webapp2.RequestHandler):
    # increment RSVP count when GO button is clicked
    def post(self):
        itemkey = ndb.Key('Items', self.request.get('itemid'))
        item = itemkey.get()
        item.rsvp = item.rsvp + 1
        item.put()
        self.redirect('/search')

# Handler for the Search page
class Search(webapp2.RequestHandler):
    # Display search page
    def get(self):
        user = users.get_current_user()
        if user:  # signed in already
            # Retrieve items
            query = ndb.gql("SELECT * "
                            "FROM Items ")

            template_values = {
                'user_mail': users.get_current_user().email(),
                'logout': users.create_logout_url(self.request.host_url),
                'items': query,
            }
            template = jinja_environment.get_template('search.html')
            self.response.out.write(template.render(template_values))
        else:
            self.redirect(self.request.host_url)

app = webapp2.WSGIApplication([('/', MainPage),
                           ('/giftbook', MainPageUser),
                           ('/wishlist', WishList),
                           ('/deleteitem', DeleteItem),
                           ('/search', Search),
                           ('/rsvp', RSVPItem),
                           ('/display', Display),
                           ('/displaytag', Displaytag)],
                          debug=True)

这是来自' search.html'的html文件。只显示我认为相关的部分。

<h4> Events List </h4>
<table class="table table-bordered table-striped">
    <thead>
    <tr>
        <th width="10%">Name</th>
        <th>Description</th>
        <th width = "10%">Link</th>
        <th width = "10%">Date</th>
        <th width = "10%">Type</th>
        <th width = "10%">RSVP</th>
        <th width = "10%">Rolling?</th>
    </tr>
    </thead>
    <tbody>
    {% for item in items %}
        <tr>
            <td>{{ item.event_name }} </td>
            <td>{{ item.description }}</td>
            <td>{{ item.event_link}}</td>
            <td>{{ item.date.strftime('%Y-%m-%d')  }}</td>
            <td>{{ item.event_type}}</td>
            <td>{{ item.rsvp }}
            <td>
                <form action="/rsvp" method="post">
                    <input type="hidden" name="itemid" value="{{ item.item_id }}">
                    <input type="submit" value="GO!">
                </form></td>
        </tr>
    {% endfor %}
    </tbody>
</table>

1 个答案:

答案 0 :(得分:1)

<form action="/rsvp" method="post">将其发送至/rsvp。你有/rsvp的网址处理程序吗?

确保将Key投射到int

itemkey = ndb.Key('Items', int(self.request.get('itemid')))

不要设置自己的ID item_id,只需使用内置的Key

<input type="hidden" name="itemid" value="{{ item.key.id() }}">

检查日志以查看是否有任何错误。