我正在使用WTFor与GAE并试图找出设置key_name值的最佳方法。这工作,但它不是很干净。具体来说,P =帖子(KEY_NAME ...线似乎是多余的保存key_name值GAE和WTforms
class CreatePost(BaseHandler):
def post(self):
form = MyForm(self.request.POST)
if form.validate():
p = Posts()
p.author = users.get_current_user()
p.title = form.title.data
p.path = format_post_path(p)
p.content = form.content.data
p = Posts(key_name=p.path, author=p.author,
title=p.title, content=p.content, path=p.path)
p.put()
return webapp2.redirect('/admin/')
else:
self.render_template('create.html', {'form':form})
我试图做到这一点,但它不工作
class CreatePost(BaseHandler):
def post(self):
form = MyForm(self.request.POST)
if form.validate():
p = Posts()
p.author = users.get_current_user()
p.title = form.title.data
p.path = format_post_path(p)
p.content = form.content.data
p.key_name = p.path
p.put()
return webapp2.redirect('/admin/')
else:
self.render_template('create.html', {'form':form})
我的问题:什么是?写这个最好的办法,为什么不p.key_name = p.path工作
更新1
下面是相关代码:
from models import Posts
import fix_path
import wtforms
from wtforms.ext.appengine.db import model_form
from wtforms import Form, TextField, validators
MyForm = model_form(Posts, Form, field_args = {
'title' : {
'validators' : [validators.Length(min=1, max=25)]
},
'content' : {
'validators' : [validators.Length(min=4, max=100000)]
}
})
def slugify(s):
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore').lower()
return re.sub('[^a-zA-Z0-9-]+', '-', s).strip('-')
def format_post_path(p):
slug = slugify(p.title)
return config.post_path_format % {
'slug': slug,
'year': p.date_create.year,
'month': p.date_create.month,
'day': p.date_create.day,
}
class BaseHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_template(
self,
filename,
template_values,
**template_args
):
template = fix_path.jinja_environment.get_template(filename)
self.response.out.write(template.render(template_values))
class CreatePost(BaseHandler):
def post(self):
form = MyForm(self.request.POST)
if form.validate():
p = Posts()
p.author = users.get_current_user()
p.title = form.title.data
p.path = format_post_path(p)
p.key_name = p.path #this part doesn't work.
#No error. Just not value
#passed to datastore.
p.content = form.content.data
p.put()
return webapp2.redirect('/admin/')
else:
self.render_template('create.html', {'form':form})
def get(self):
MyForm = model_form(Posts, Form)
self.render_template('create.html', {'form':MyForm()})
从配置文件
post_path_format = '/%(year)d/%(month)02d/%(slug)s'
我只是不明白,为什么我可以使用p.key_name = p.path格式(如第一个片段)。为什么我要对你的帮助做P =帖子(KEY_NAME =路径,笔者= p.author .....(像第二个片段)
感谢。
你得到的错误是什么?你的模型是怎样的?另一件事是 – aschmid00
。我会将模型称为Post而不是Posts。 format_post_path(路径)做什么? – aschmid00