Django form在模版中的渲染方式

在使用Django做模板渲染的开发时,常会用到表单渲染,在这里总结一下五种渲染方式。

一、forms.as_p

渲染表单为一系列的p标签,每个p标签包含一个字段:

<p> 
   <label for="id_subject">Subject:</label>
   <input id="id_subject" type="text" name="subject" maxlength="100" />
</p>

二、forms.as_ul

渲染表单为一系列的li标签,每个li 标签包含一个字段,它不包含ul标签:

<li>
  <label for="id_subject">Subject:</label>
  <input id="id_subject" type="text" name="subject" maxlength="100" />
</li>

三、form.as_table

输出表单为一个HTML的table:

<tr>
  <th>
    <label for="id_subject">Subject:</label>
  </th>
  <td>
    <input id="id_subject" type="text" name="subject" maxlength="100" />
  </td>
</tr>

四、for field in form

通过迭代form,获取其中的所有field。field可引用的包括{{ field.label_tag }} , {{ field }} , {{ field.errors }} :

 {% for field in form %}
  <div class="form-group">
      {{ field.label_tag }}
     <div class="">
        {{ field }}
     </div>
     {{ field.errors }}
  </div>
 {% endfor %}
  • field.label_tag
    {{ field.label_tag }}输出为field的label元素:
    <label for="id_message">Message:</label>
  • field
    {{ field }}输出为field的input
    <input type="text" name="message" id="id_message" />
  • field.errors
    {{ field.errors }}field的errors元素(errors一般在form验证出错的时候显示)
    'This field is required.'

五、form.fieldname

直接将form作为一个dict,引用其每一个field,比如 {{ form.title }} 引用form中的title这个field:

<div class="form-group">
   <label class="control-label">
       {{ form.title.label_tag }}    
   </label>
   <div class="">
       {{ form.title }}
   </div>
   {{ form.title.errors }}
</div>

这种方式一般用于form需要更加精准的样式的时候,逐个元素逐个元素的编排到html中。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!