2017-06-19 11 views
2

後は、私のプログラムがGoogle App Engineの:種類エラー

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) 

あるしかし、私はこのプログラムを実装しようとしているとき、私は次のエラーを取得しています:

File "C:\Users\tan31102\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platfo rm\google_appengine\google\appengine\ext\db__init__.py", line 299, in class_for _kind raise KindError('No implementation for kind \'%s\'' % kind) KindError: No implementation for kind 'posts'

誰かが助けてくださいこれで私。

答えて

0

モデル定義を使用するPyファイルにインポートする必要があります。これにより、KindErrorが発生します。

from posts import posts

または類似した何か。

最初にpostsモデルをインポートせずにセッションからpostsエンティティをロードしようとしているようです。

セッションミドルウェアの実行時にpostsが使用できるようにするには、postsモデルをスクリプトにインポートする必要があります。

+1

ありがとう@Abhinavたくさん。それは私のために働いた:) –

+0

@テイラーを助けてうれしい。コーディングをして喜んでください!乾杯。あなたのプロジェクトが成功することを願っています。 –

1

あなたのGQLは複数形でポストを使用しています - "投稿" あなたが宣言したdb.Modelクラスが単数形でポストを使用しながら

select * from posts order by desc limit 1

(ポスト)

class Post(db.Model): 

あなたが必要いずれかのフォームに固執する。また、db.Modelの代わりにndb.Modelを使用することを検討してください。as stated in the docs

+0

ありがとう@Arne。確かに愚かな間違いだった。しかし、それは問題を解決しません。私はまだプログラムを実行中にエラーが発生しています –