【发布时间】:2015-09-10 14:19:38
【问题描述】:
只是为了好玩,我正在用 Python 创建一个网站,并使用 Google 数据存储创建一个网站,让用户可以发布电影标题和电影评论。我也在使用 Jinja2 模板。问题是,movie_name 在所有情况下都被写入数据库,除了一个,它是在说MoviePage 的类中。似乎这是唯一没有读取变量 movie_name 的类,甚至 jinja 模板也没有读取该变量。但是,我的 html 中有其他变量正在由 jinja2 解析,这只是我遇到问题的一个变量。这是我的代码:
class MovieReviews(db.Model):
movie_name = db.StringProperty()
review = db.TextProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
last_modified = db.DateTimeProperty(auto_now = True)
class MoviesOnWebsite(db.Model):
movie_name = db.StringProperty(required = True)
created = db.DateTimeProperty(auto_now_add= True)
class AddMovie(StrHandler):
def get_front(self,movie_name="",error=""):
add_movie = db.GqlQuery("SELECT * FROM MoviesOnWebsite")
self.render("add-movie.html",movie_name=movie_name,error=error,add_movie=add_movie)
def get(self):
self.get_front()
def post(self):
haveError = False
movie_name = self.request.get("movie_name")
params = dict(movie_name=movie_name)
if not movie_name:
params['error_movie_name'] = "Must write movie name"
haveError = True
if haveError:
self.render("add-movie.html", **params)
self.response.out.write('You have errors')
else:
addmovie = MoviesOnWebsite(movie_name=movie_name)
addmovie.put()
site_url = urllib.urlencode(dict(movie_name=movie_name))
self.redirect('/' + site_url)
class MoviePage(StrHandler):
def get_front(self, review="",error=""):
addmovie = AddMovie()
full_url = addmovie.site_url
movie_reviews = db.GqlQuery("SELECT * FROM MovieReviews")
self.render("movie_review_page.html", review=review,error=error,movie_reviews=movie_reviews)
def get(self,url):
self.get_front()
def post(self,url):
path = urlparse.urlparse(full_url).path
movie_name = self.request.get('movie_name')
review = self.request.get("review")
if review:
movie_rev = MovieReviews(path = path,review = review)
movie_rev.put()
else:
error = "You haven't submitted a review"
self.get_front(review,error)
还有一个小代码 sn-p 从我的 html 页面调用movie_review_page.html 来验证 jinja 语法是否正确:
<body>
<h1>{{movie_name}}</h1>
....
我将解释我的代码在做什么。 MovieReviews 和 MoviesOnWebsite 类只是数据库模型。 AddMovie 类允许用户在没有人为该特定电影提交评论的情况下将电影添加到数据库中。用户将电影名称添加到数据库后,他们会被重定向到如下所示的 url:www.websitename.com/nameOfMovie。从那里,MoviePage 类有一个表单,允许用户添加电影标题和评论并将其添加到数据库中。正如我之前提到的问题,当用户在MoviePage 类中添加电影标题和评论时,只有评论被写入数据库并且电影标题为空白。我要写入数据库的电影标题是用户正在评论的电影,即在 url 中找到的电影的名称。 movie_name 只会写入AddMovie 类中的数据库。带有电影名称的路径的 url 也可以使用。问题出在MoviePage 类中。我应该提到add-movie.html 有一个名为movie_name 的文本框,而movie_review_page.html 没有。如果我将变量从 movie_name = self.request.get('movie_name') 更改为 movie_name="abcd",那么 abcd 会被写入数据库,但反过来就不行了。
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
您使用的是哪个网络框架?
标签: python python-2.7 google-app-engine jinja2 google-cloud-datastore