Jinja2でWTformsを使用しており、既存のフォームオブジェクトを編集する新しいインスタンスを作成するかどうかに応じて、テンプレートページのタイトルを変更したいと思います。
これは私がテンプレートに書いたものです:
{% block title %}{% if form.obj %}Edit{% else %}New{% endif %} Post{% endblock %}
私が期待するもの:
フォームに記入すると、ページタイトルに「投稿の編集」と表示されるはずです。
フォームが空の場合、ページタイトルに「新しい投稿」が表示されると思います。
私が得るもの:両方の場合の「新しい投稿」。
これがフォーム値を渡している私の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})
つまり、私がやろうとしているのは、フォームが入力されているかどうかをテストし、それに応じてページタイトルを「新規投稿」または「投稿編集」に変更することだけです。