Google app engine 测试Jinja2中是否存在表单实例

Google app engine 测试Jinja2中是否存在表单实例,google-app-engine,jinja2,wtforms,Google App Engine,Jinja2,Wtforms,我将WTforms与Jinja2一起使用,希望根据是否创建编辑现有表单对象的新实例来更改模板页面标题 这是我在模板中写的: {% block title %}{% if form.obj %}Edit{% else %}New{% endif %} Post{% endblock %} 我期望看到的是: 如果填写了表格,我希望在页面标题中看到“编辑帖子” 如果表单为空,我希望在页面标题中看到“newpost” 我得到的是:两种情况下的“新帖子” 这是我传递表单值的PostHandler def

我将WTforms与Jinja2一起使用,希望根据是否创建编辑现有表单对象的新实例来更改模板页面标题

这是我在模板中写的:

{% block title %}{% if form.obj %}Edit{% else %}New{% endif %} Post{% endblock %}
我期望看到的是:

如果填写了表格,我希望在页面标题中看到“编辑帖子”

如果表单为空,我希望在页面标题中看到“newpost”

我得到的是:两种情况下的“新帖子”

这是我传递表单值的PostHandler

def with_post(fun):
    def decorate(self, post_id=None):
        post = None
        if post_id:
            post = models.BlogPost.get_by_id(int(post_id))
            if not post:
                self.error(404)
                return
        fun(self, post)
    return decorate

class PostHandler(BaseHandler):
    def render_form(self, form):
        self.render_to_response("edit.html", {'form': form})

    @with_post
    def get(self, post):
        self.render_form(MyForm(obj=post))

    @with_post
    def post(self, post):
        form = MyForm(formdata=self.request.POST, obj=post)
        if post and form.validate():
            form.populate_obj(post)
            post.put()
            post.publish()
            self.render_to_response("published.html", {'post': post})
        elif self.request.POST and form.validate():
            post = models.BlogPost()
            post.title = form.title.data
            post.body = form.body.data
            post.tags = form.tags.data
            post.publish()
            self.render_to_response("published.html", {'post': post})
        else:
            self.render_to_response('edit.html', {'form':form})

简而言之,我所要做的就是测试表单是否已填写,并相应地更改我的页面标题“New Post”或“Edit Post”

虽然表单接受一个obj参数,但它实际上并没有存储它,它只是使用该obj来填充formdata未提供的任何空白。因此,当您询问Jinja2
{%if form.obj%}
时,它总是会为False,因为从来没有obj属性(当然,除非您有一个恰好被称为obj的字段)

如果你正在编辑一篇文章,你将有一个id来使用,这样你就知道要在数据库中更新哪篇文章,那么你当前将它存储在哪里?假设将其存储为隐藏字段,则可以执行以下操作:

{% if form.id.data == None %}Must be a New form {% endif %}
如果要检查整个表单是否为空,可以访问
表单.data
字典,并确保所有条目都是
None
,不过需要小心,因为我知道FileField返回的是
u'None'
,而不是真正的
None
,因此,您必须再次检查您关心的字段