Lor*_*nzo 12 python django django-forms
我有一个如下形式:
class MyForm(Form):
  #personal data
  firstname = CharField()
  lastname = CharField()
  #education data
  university = CharField()
  major = CharField()
  #foobar data
  foobar = ChoiceField()
由于某些字段(如foobar)是从数据库填充的,除了让Django使用form.as_ul为我渲染之外,我不能使用其他方法
此外,我希望我不必以多种形式拆分表格以便于维护
有没有办法告诉Django在这些表单部分之间显示帮助文本,以便我可以提供一些如何填写表单的说明?
我希望表单能够呈现如下内容:
<form>
  <p>Here you enter your personal data...</p>
  <input name='firstname'>
  <input name='lastname'>
  <p>Here you enter your education data...</p>
  <input name='university'>
  <input name='major'>
</form>
我是否需要创建自己的小部件才能显示这些<P>标签,还是有更简单的方法?
谢谢
hor*_*ora 15
使用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:我意识到这个回复已经很晚了,我相信你已经解决了这个问题,但我认为这应该对现在遇到这个问题的人有所帮助.
小智 10
如果要自定义表单,则不必呈现它form.as_ul.如果你正确设置了表单模型,Django知道如何渲染foobar ...试试吧......不用担心.
看看服务器上发送了你的页面的python.例如,如果它发送了这样的django表单:
return respond(request, user, 'templateName', { 'myform':myform })
然后templateName.html将具有:
<blockquote>
<form>
    <p>Here you enter your personal data...</p>
    {{myform.firstname }}
    <p>Here you enter your education data...</p>
    {{myform.university }}
    <p> a choice field </p>
    {{myform.foobar}}
</form>
</blockquote>