我正在尝试这个想法,其中有一个'事件的表格。在' /搜索'页面和当'' 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>
答案 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() }}">
检查日志以查看是否有任何错误。