我刚刚开始学习Python,我正在慢慢掌握它,但我遇到了一个问题。
我正在尝试使用Google的App Launcher SDK创建一个包含文章的简单网站。
现在,当我关注Google网站上的小指南时,一切正常,但现在我想创建另一个数据库:
class Articles(db.Model):
title = db.TextProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
这里没有错误。 然后我尝试进行查询,获取所有信息并将其发布到模板中:
class Articles(webapp.RequestHandler):
def get(self):
articles_query = Articles.all().order('-date')
articles = articles_query.fetch(10)
template_values = {'articles': articles}
path = os.path.join(os.path.dirname(__file__), 'articles.html')
self.response.out.write(template.render(path, template_values))
我收到错误:
line 45, in get
articles_query = Articles.all().order('-date')
AttributeError: type object 'Articles' has no attribute 'all'
我基本上从Google的教程中复制了查询,只是更改变量,但它不起作用。
有什么想法吗?
答案 0 :(得分:7)
并不是您已经定义了两个数据库,而是您尝试创建了两个名为Articles
的类。 Python不能同时将它们放在头脑中,所以一旦你做出class Articles(webapp.RequestHandler)
,它就会取代class Articles(db.Model)
。
webapp.RequestHandler
没有all()
方法,并且您没有在第二个Articles
类中定义一个方法。这就是你遇到特定错误的原因。
您应该为您的班级使用不同的名称。
答案 1 :(得分:2)
我会以这种方式重构 * :
在class Articles(webapp.RequestHandler)
class ArticlesHandler(webapp.RequestHandler)
将您的Articles
模型移到名为models.py
的单独文件中
将from models import Articles
添加到 webhandlers 文件
使用Handler后缀可以帮助您区分规范类和Web处理程序;
一个不同的models.py
模块将您的模型实现隔离在一个地方,并且在您的项目变得更加复杂时非常有用。
*第1步足以解决您的具体问题