用过django的FormWizard的人肯定感觉到它的方便灵活,但是没有一个上一步下一步的功能,有点遗憾
还好django是开源的,想增强一下这个功能,自己小修改一下源码就可以了(其实就增加了3行代码),用法也没啥区别,原来继承FormWizard改成NewFormWizard,附件里面有这个源文件(基于django1.0.2 的版本)
#from django.contrib.formtools.wizard import FormWizard
#改为
from newwizard import NewFormWizard
class PublisherWizard(NewFormWizard):
def done(self, request, form_list):
return render_to_response('books/wizard_done.html', {
'form_data': [form.cleaned_data for form in form_list],
})
def get_template(self, step):
return 'books/wizard.html'
当然相应的wizard.html模板得有个上一步 下一步的button
{% extends "books/base.html" %}
{% block content %}
<p>Step {{ step }} of {{ step_count }}</p>
<form action="." method="post">
<table>
{{ form.as_table }}
</table>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe}}
<input type="hidden" id="clicked" type="text" name="clicked" value="" />
<input type="submit" οnclick="javascript:document.getElementById('clicked').value='back';" value="back" {% ifequal step 1 %}disabled="disabled"{% endifequal %}>
<input type="submit" οnclick="javascript:document.getElementById('clicked').value='next';" value="next" {% ifequal step step_count %}disabled="disabled"{% endifequal %}>
<input type="submit" value="submit" {% ifequal step 1 %}disabled="disabled"{% endifequal %}>
</form>
{% endblock %}
效果图: