我正在使用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}}吗?请注意,如果出现验证错误,我仍然需要在此网页上显示。怎么做到这一切?模板外观的简单示例将是理想的。
答案 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 %}