我使用Pyramid构建了一个webapp,我有两个观点,其中一个导向另一个:
config.add_route("new", "/workflow/new")
config.add_route("next", "/workflow/{id}/next")
new
视图非常简单,只显示一个HTML表单作为Jinja2 template,供用户填写一些信息:
<form method="post" action="{{ request.route_url('next',id='') }}" >
<input type="text" name="id" value="Identifier" />
...
<input type="submit" name="next" value="Next" />
</form>
这里的问题涉及该表单的action
:如何使用文本输入字段id
的内容,或者稍微处理它,然后在路由请求中传递它?
请注意,在此方案中,表单数据从new
视图传递到next
视图,并且应该保持不变。
答案 0 :(得分:0)
发布表单后,表单字段将在请求对象中可用,请参阅 http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/webob.html#request
我认为发布到相同的网址(<form action="#" method="post">
)也是一个好主意,这样您就可以验证表单。然后,您可以在表单有效时处理并重定向到下一个URL,或者如果不是,则重新创建包含错误的表单。
所以你的观点可能最终会像这样;
from pyramid.httpexceptions import HTTPFound
from pyramid.url import route_url
def myview(request):
if request.method == 'POST':
# Validate the form data
if <form validates successfully>:
# Do any processing and saving here.
return HTTPFound(location = route_url('next', id=request.params['id'], request=self.request))
else:
request.session.flash("The form isn't valid.")
# Do some stuff here to re-populate your form with the request.params
return { # globals for rendering your form }
已经有很多问题/答案可以解决这个问题,例如How can I redirect after POST in Pyramid?