2010-08-06 55 views
2

我正在嘗試做一些非常簡單的事情;我想一個「隱藏」的樣式應用於表單域,當我在一些初始值已經通過了這樣一個Django模板中:在迭代字段時訪問django表單的初始值

form = form_class(initial={'field':data}) 

通常情況下,這將是這樣的:

<li class="{{form.somefield.name}} {% if form.somefield.initial %} hidden{% endif %}> 
    ... 
</li> 

但我遍歷的形式,所以我想要做的做的東西,看起來像這樣:

{% for field in form %} 
    <li class="{{field.name}} {% if field.initial %} hidden{% endif %}"> 
    ... 
    </li> 
{% endfor %} 

但這不起作用,因爲field.initial只有定義爲初始值到形式領域,而不是表單創建時傳入的數據。除了將迭代轉換爲單個表單之外,還有一個很好的解決方案嗎?

我想過的一些(壞)解決方案:

  • 覆蓋初始化到的東西值形成self.initial到self.fields;
  • 寫一個名爲{%hideifhasinitial%}的模板標籤
  • 向self和self.initial上使用zip的表單添加一個方法(不起作用,因爲self.initial只有一個元素,而self有4個,它只迭代了1個元素,而鍵(字段名稱)不匹配)。

回答

4

這個怎麼樣?

{% for field in form %} 
    {% if field.name in field.form.initial.keys %} 
     ... 
    {% endif %} 
{% endfor %} 
0

原來有一種更簡單的方法來做到這一點。

{% if field.name in form.initial.keys %} 
0

帶初始鍵的解決方案對我而言並不奏效,因爲該字段包含一個空字符串作爲值。我不得不寫我自己的自定義標籤:

from django import template 
register = template.Library() 

@register.simple_tag 
def field_empty(field): 
    if not field.form.initial.get(field.name): 
     return ' hidden' 

    return '' 

在你的榜樣,我會使用標籤是這樣的:

<li class="{{ field.name }} {% field_empty field %}"> 
1

初始數據可以在value屬性來訪問,初步數據表示該字段:

{{field.value}}