filter()和get()没有给出正确的GQLQuery结果

2024-10-03 09:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在使用googleappengine构建一个小wiki,如果您键入一个类似/newpage的URL,它会将您重定向到它(如果它已经存在),否则它会将您重定向到/edit/newpage/,您可以在那里编辑(或者在本例中添加)页面的内容。编辑之后,它会将您重定向到页面本身,即/newpage

代码如下:

包含以下项的表:

class Entries(db.Model):
    title = db.TextProperty(required = True)
    content = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)

应用程序处理程序:

app = webapp2.WSGIApplication([('/', MainPage),
                            ('/signup', SignUp),
                            ('/welcome', Welcome),
                            ('/login', Login),
                            ('/logout', Logout),
                            ('/([a-zA-Z0-9_]+)', WikiEntry),
                            ('/edit/([a-zA-Z0-9_]+)', EditWikiEntry)
                            ], debug = True)

处理程序功能:

class WikiEntry(webapp2.RequestHandler):
def get(self, wiki_entry):
1   entry = Entries.all().filter('title =', wiki_entry).get()
2   # entry = db.GqlQuery("select * from Entries where title = 'hello'")
3   # logging.error(entry.title)
4   logging.error(entry)
5   if entry:
6       logging.error("inside if")
7       self.response.write(render_str('entrypage.html', entry=entry))
8   else:
9       logging.error("inside else")
10      self.redirect('/edit/' + wiki_entry)

class EditWikiEntry(webapp2.RequestHandler):
1    def get(self, wiki_entry):
2       self.response.write(render_str('edit.html', wiki_entry = wiki_entry))

3    def post(self, wiki_entry):
4       content = self.request.get('textarea')
5       if content:
6           e = Entries(title = wiki_entry, content = content)
7           e.put()
8       self.redirect('/' + wiki_entry)

textareaedit页上文本区域的名称

这里是entrypage.html

<html>
<head>
    <title>{{ entry.title }}</title>
</head>
<body>
    {{ entry.content }}
</body>
</html>

所以问题是:我输入了/hello,由于它不存在,它将我重定向到edit页面。我输入内容<h1> Hello World </h1>,点击Save,但它再次将我重定向到edit页面(文本区域为空)。我去了管理页面,并确认确实有一个标题和内容的对象,我已经保存

我试着调试,发现WikiEntry的第1行中的查询函数不起作用。当我在第4行打印出entry时,它是None。当我手动将字符串hello放入查询中时,就像WikiEntry的第2行一样,我确实从第4行得到了一个对象,它将我重定向到entrypage.html,但没有任何内容。当我在控制台上打印标题时,如第3行所示,它抛出了一个AttributeError

AttributeError: 'GqlQuery' object has no attribute 'title'

如果对象没有title属性,那么它首先是如何打印对象的

<google.appengine.ext.db.GqlQuery object at 0x04766270>

我真的很困惑,不知道怎么解决这个问题


Tags: selftrue内容dbgettitlehtmlwiki
1条回答
网友
1楼 · 发布于 2024-10-03 09:14:16

您正在执行一个查询来检索WikiPage,有时(由于最终的一致性),查询将找不到刚刚创建的页面

您需要花一些时间阅读最终的一致性,在使用数据存储时理解这一概念非常重要

我建议您考虑使用wiki页面名称作为Entries实体的键,然后通过键而不是通过查询获取。这将保证您始终能够检索刚刚创建的条目

相关问题 更多 >