【问题标题】:Google App Engine: Kind ErrorGoogle App Engine:种类错误
【发布时间】:2017-06-19 07:58:09
【问题描述】:

以下是我的程序

import os    
import jinja2    
import re    
from string import letters    
import webapp2    
from google.appengine.ext import db

template_dir= os.path.join(os.path.dirname(__file__),'templates')
jinja_env= jinja2.Environment(loader= jinja2.FileSystemLoader(template_dir),autoescape= True)

class Handler(webapp2.RequestHandler):
    def write(self,*a,**kw):
        self.response.write(*a,**kw)

    def render_str(self,template, **params):
        t= jinja_env.get_template(template)
        return t.render(params)

    def render(self,template, **kw):
        self.write(self.render_str(template,**kw))

def blog_key(name = "default"):
    return db.Key.from_path('blogs',name)

class Post(db.Model):
    title= db.StringProperty(required= True)
    content= db.TextProperty(required= True)
    created= db.DateTimeProperty(auto_now_add= True)
    edited= db.DateTimeProperty(auto_now= True)

    def render(self):
        self._render_text= self.content.replace('\n', '<br>')
        return render_str("blogs.html", p= self)

class BlogFront(Handler):
    def get(self):
        posts= db.GqlQuery("select * from posts order by desc limit 10")
        self.render("front.html", posts=posts )

#for a link to the new posts created
class PostPage(Handler):
    def get(self, post_id):
        key= db.Key.from_path("Post", int(post_id), parent= blog_key())
        post=db.get(key)

        if not post:
            self.error(404)
            return

        self.render("permalink.html", post=post)

#for new blog entries
class NewPost(Handler):
    def get(self):
        self.render('newpost.html')

    def post(self):
        title= self.request.get("title")
        content= self.request.get("content")

        if title and content:
            p= Post(parent= blog_key(), title=title, content=content)
            p.put()

            self.redirect('/blogs/%s' % str(p.key().id()))
        else:
            error= "Please write both title and content!!"
            self.render("newpost.html",title=title, content=content, error=error)

app = webapp2.WSGIApplication([
      ('/blog/newpost', NewPost), 
      ('/blogs/?',BlogFront),
      ('/blogs/([0-9]+)',PostPage),    #anything in the bracket will be passed as the parameter

], debug=True)

但是当我尝试实现这个程序时,我得到了以下错误:

文件“C:\Users\tan31102\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platfo rm\google_appengine\google\appengine\ext\db__init__.py”,第 299 行,在 class_for _种类 raise KindError('No implementation for kind \'%s\'' % kind) KindError: No implementation for kind 'posts'

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python-2.7 google-app-engine


    【解决方案1】:

    你的 gql 使用复数形式的 post - “posts”

    select * from posts order by desc limit 1

    而您声明的 db.Model 类使用单数形式的帖子 (Post)

    class Post(db.Model):
    

    您需要坚持使用任何一种形式。你也应该考虑使用 ndb.Model 而不是 db.Model as stated in the docs

    【讨论】:

    • 谢谢@Arne。那确实是一个愚蠢的错误。但这并不能解决问题。运行程序时我仍然收到错误
    【解决方案2】:

    您必须在使用它的 Py 文件中导入模型定义。这会导致KindError

    from posts import posts

    或类似的东西。

    听起来您正在尝试从会话中加载 posts 实体,而没有先导入 posts 模型。

    为确保在会话中间件运行时posts 可用,您必须在脚本中导入posts 模型。

    【讨论】:

    • 很高兴帮助@Taylor。继续编码并保持快乐!干杯。希望您的项目取得成功。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2019-01-19
    相关资源
    最近更新 更多