2010-08-06 73 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}}

相关问题