django form 渲染

Django 的Form 類

Form包含各類字段(Field),每一個Field也是一個類,每一個Field包含一個widget的類,用來控制html元素的展現個屬性等.html


Formpython

全部的Form都做爲django.forms.Form 的子類建立django

form.is_bound 返回當前表單是否已綁定數據api

hidden_fields() visible_fields() 分別返回全部隱藏的列和可見的列app


Widget 類

每一個Field都會根據字段類型對應一個默認的類,也能夠手動指定widget的值來更改默認widget類,以下ide

name=forms.CharField(label='名稱'max_length=200,widget=forms.TextInput(attrs={'class':'form-control'}))

widget.attrs 測試

 html屬性的一個字典  #{'class': 'form-control', 'required': 'required'}ui



字段的數據

無論表單提交的是什麼數據,一旦經過調用is_valid() 成功驗證(is_valid() 返回True),驗證後的表單數據將位於form.cleaned_data 字典中。這些數據已經爲你轉換好爲Python 的類型。this

編碼

此時,你依然能夠從request.POST 中直接訪問到未驗證的數據,可是訪問驗證後的數據更好一些。


手動渲染字段

手動渲染時要加上non_field_errors這個錯誤信息.

{{ form.non_field_errors }}

<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="{{ form.subject.id_for_label }}">Email subject:</label>
    {{ form.subject }}</div>

field 中有用的屬性


`field`.`get_XXX_display`  #xx指字段名.

當定義的字段爲關係字段,選擇字段,bool等等,

django會自動生成一個get_xx_display的方法來生成這些字段的展現數據.

is_end_state = models.SmallIntegerField('是否', default=0,choices=[(0,'否'),(1,'是')])

is_end_state = models.SmallIntegerField('是否', default=0,choices=[(0,'否'),(1,'是')])

當字段類型爲CharField時使用get_xx_display,獲取到的值爲自己,

直接打印出來爲0或者1,使用get_xx_display打印出來則爲定義字段時的則爲是/否


  • {{ field.label }}

  • 字段的label,例如Email address。

  • {{ field.label_tag }}

  • 包含在HTML <label> 標籤中的字段Label。它包含表單的label_suffix。例如,默認的label_suffix 是一個冒號:

    <label for="id_email">Email address:</label>
  • {{ field.id_for_label }}

  • 用於這個字段的ID(在上面的例子中是id_email)。若是你正在手工構造label,你可能想使用它代替label_tag。若是你有一些內嵌的JavaScript 而且想避免硬編碼字段的ID,這也是有用的。

  • {{ field.value }}

  • 字段的值,例如someone@example.com。

  • {{ field.html_name }}

  • 輸入元素的name 屬性中將使用的名稱。它將考慮到表單的前綴。

  • {{ field.help_text }}

  • 與該字段關聯的幫助文檔。

  • {{ field.errors }}

  • 輸出一個<ul class="errorlist">,包含這個字段的驗證錯誤信息。你可使用{% for error in field.errors %}自定義錯誤的顯示。 這種狀況下,循環中的每一個對象只是一個包含錯誤信息的簡單字符串。

  • {{ field.is_hidden }}

  • 若是字段是隱藏字段,則爲True,不然爲False。做爲模板變量,它不是頗有用處,可是能夠用於條件測試,例如:

{% if field.is_hidden %}
{% endif %}
  • {{ field.field }}

  • 表單類中的Field 實例,經過BoundField 封裝。你可使用它來訪問Field 屬性,例如{% char_field.field.max_length %}。

相關文章
相關標籤/搜索