如何在Django表单向导中更改模板的布局?

时间:2013-02-03 07:58:49

标签: django django-forms django-templates

我正在使用Django的Form Wizard包来创建一个4步表单。 我已经为这四个步骤中的每个步骤创建了表单。它工作正常。在我的例子中,我创建了4个单独的模板,表单向导的每个步骤都使用自己的模板。

但我创建的每个模板都基本相同。下面是每个代码。我从其他地方剪切并粘贴了这个。它有效,但我不完全理解如何或为什么:

<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
    {{ wizard.form.management_form }}
    X
    {% for form in wizard.form.forms %}
        {{ form }}
    {% endfor %}
{% else %}
    Y
    {{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "Previous Step" %}</button>
{% endif %}
<input type="submit" value="{% trans "Next Step" %}"/>
</form>

我需要做的是在步骤#2中更改表单的布局。我不希望表单的输入元素按照当前的状态堆叠在一起。我想通过操纵它来做一些不同的事情。

但我不知道该怎么做。有人可以向我展示一个模板,在这个模板中,他们使用实际命名的表单元素而不仅仅是{{wizard.form}}吗?请注意,如果出现验证错误,我仍然需要在此网页上显示。怎么做到这一切?模板外观的简单示例将是理想的。

1 个答案:

答案 0 :(得分:0)

如果您想控制表单的呈现,则应render the form fields manually。毕竟,你的表格仍然是标准的Django形式。


  

但是我创建的每个模板都基本上是   相同。

你当然不应该为每一步重复相同的模板。

将模板用作基本模板会更加清晰,并在您为自定义布局的步骤提供的模板中扩展此基本模板。这样你就可以轻松地为某些步骤嵌入额外的CSS或JS。

所以而不是

{% for form in wizard.form.forms %}
  {{ form }}
{% endfor %}

您将在基本模板中创建以下块

{% block form %}
  {{ wizard.form }}
{% endblock %}

通过简单地覆盖表单块,您可以通过某种方式自定义表单的呈现。

{% extends "base_step.html" %}
{% block form %}
  {{ wizard.form.example_field_to_show }}
  ...
{% endblock %}