0

我正在使用 Django 的表单向导包来创建一个 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 步(共 4 步)中更改表单的布局。我不希望表单的输入元素像当前那样堆叠在一起。我想通过操纵 .

但我不知道该怎么做。有人可以向我展示他们使用实际命名的表单元素而不仅仅是 {{wizard.form}} 的模板吗?请记住,如果出现验证错误,我仍然需要在此网页上显示该错误。如何完成这一切?一个简单的例子来说明您的模板是什么样子的将是理想的。

4

1 回答 1

0

如果您想控制表单的呈现,您应该手动呈现表单域。毕竟,您的表单仍然是标准的 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 %}
于 2013-02-03T15:17:58.620 回答