Просто для удовольствия я создаю сайт на Python и использую Google Datastore для создания веб-сайта, который позволяет пользователям публиковать название фильма и обзор фильма. Я также использую шаблоны Jinja2. Проблема в том, что movie_name
записывается в базы данных во всех случаях, кроме одного, который находится в классе, который говорит MoviePage
. Кажется, что это единственный класс, который не читает переменную movie_name
, даже шаблон jinja не читает эту переменную. Однако у меня есть другие переменные в моем html, которые анализируются jinja2, только одна переменная, с которой я столкнулся. Вот мой код:Пользовательский ввод в Python не записывается в базу данных
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)
И небольшой фрагмент кода из моей страницы HTML называется movie_review_page.html
, чтобы убедиться, что синтаксис дзиндзя правильно:
<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 будет записана в базу данных, но это не сработает наоборот.
Буду признателен за любую помощь.
Какой у вас веб-сайт? –