再利用可能なDjangoアプリになりたいと思っているものを書きましたが、投稿フォームの処理を柔軟にする方法については少し難問があります。ビューコードの簡略化されたバージョンは次のようになります。
def do_form(request, entity_id, template_name, success_url):
form = MyForm(request.POST or None)
if request.method =='POST':
if form.is_valid():
#do some business logic
return HttpResponseRedirect(finished_url)
return render_to_response(template_name,
{'form': form},
context_instance=RequestContext(request))
JamesBennetsの本「PracticalDjangoProjects」のアドバイスに従ったので、url confでテンプレートと成功URLを構成できるようになりました。たとえば、私のurlconfは次のようになります。
urlpatterns = patterns('myapp.views',
url(r'^do/(?P<entity_id>\d+)/$',
view = 'do_form',
name = 'do_form_view',
kwargs={'template_name':'form.html',
'success_url':'/finish/'},),
url(r'^finish/$',
view = 'finish',
name = 'finish_view')
)
/continue/<workflow_id>/
これはすべて非常にうまく機能していますが、実際のアプリケーションでこれを使用するようになったとき、このフォームがワークフローの途中にあることに気付き、成功URLを次のようにしたいと思います。問題は、url confにハードコードされたURLしか含めることができず、do_formコードを押すたびにworkflow_idが変化することです。
誰かがこれを回避する方法を提案できますか?