Один из способов сделать это без отображения формы в шаблоне с использованием form.as_ul, это использовать django-uni-form. Сначала вам нужно скачать здесь и установить его. Тогда код для настройки вашей формы может выглядеть примерно так:
from uni_form.helpers import FormHelper, Submit, Layout, Fieldset
class MyForm(Form):
#personal data
firstname = CharField()
lastname = CharField()
#education data
university = CharField()
major = CharField()
#foobar data
foobar = ChoiceField()
# now attach a uni_form helper to display the form
helper = FormHelper()
# create the layout
layout = Layout(
# first fieldset
Fieldset("Here you enter your personal data...",
'firstname', 'lastname'),
Fieldset("Here you enter your education data...",
'university', 'major'),
Fieldset('foobar')
# and add a submit button
sumbit = Submit('add', 'Submit information')
helper.add_input(submit)
Теперь, чтобы отобразить это в вашем шаблоне, вы должны сделать следующее:
{% load uni_form %}
{% with form.helper as helper %}
{% uni_form form helper %}
{% endwith %}
Это выведет HTML (примерно) так:
<form>
<fieldset><legend>Here you enter your personal data...</legend>
<input name='firstname'>
<input name='lastname'>
</fieldset>
<fieldset><legend>Here you enter your education data...</legend>
<input name='university'>
<input name='major'>
</fieldset>
<fieldset>
<input name='foobar'>
</fieldset>
</form>
Для получения дополнительной информации о uni_form, прочитайте их документы (см. Ссылку выше).
PS: я понимаю, что этот ответ опоздал, и я уверен, что вы уже решили эту проблему, но я думаю, что это должно быть полезно для тех, кто только сталкивается с этим сейчас.