1. 渲染表单

1.1. 自动渲染

模板变量 描述
{{ form }} 渲染默认表单
{{ form.as_table }} 将表单渲染进 <table> (一个输入框一个 <tr>
{{ form.as_p }} 将表单渲染进 <p>
{{ form.as_ul }} 将表单渲染进 <ul>(一个输入框一个 <li>

1.2. 手动渲染

{{ form.FieldName }} 获取单独字段

每个字段都属性,比如下面的 errors,id_for_label

参考 31. 表单模板:内置表单属性.md

  1. {{ form.non_field_errors }}
  2. <div class="fieldWrapper">
  3. {{ form.first_name.errors }}
  4. <label for="{{ form.first_name.id_for_label }}">First Name:</label>
  5. {{ form.first_name }}
  6. </div>

1.3. 循环生成字段

1.3.1. 所有字段

  1. {% for field in form %}
  2. <div class="fieldWrapper">
  3. {{ field.errors }}
  4. {{ field.label_tag }} {{ field }}
  5. {% if field.help_text %}
  6. <p class="help">{{ field.help_text|safe }}</p>
  7. {% endif %}
  8. </div>
  9. {% endfor %}

1.3.2. 只可见字段

  1. {% for field in form.visible_fields %}
  2. <div class="fieldWrapper">
  3. {{ field.errors }}
  4. {{ field.label_tag }} {{ field }}
  5. </div>
  6. {% endfor %}

1.3.3. 只不可见字段

  1. {% for hidden in form.hidden_fields %}
  2. {{ hidden }}
  3. {% endfor %}

2. 重用表单示例

比如可以反复使用评论表单 Comment Form

  1. <!-- file_form.html -->
  2. {% include "form_snippet.html" with form=comment_form %}

可复用的表单模板:

  1. <!-- form_snippet.html -->
  2. {% for field in comment_form %}
  3. <div class="fieldWrapper">
  4. {{ field.errors }}
  5. {{ field.label_tag }} {{ field }}
  6. </div>
  7. {% endfor %}