迭代字段时访问django表单的初始值

迭代字段时访问django表单的初始值,django,django-forms,Django,Django Forms,我试着做一些非常简单的事情;当我传入一些初始值时,我希望对django模板内的表单字段应用“隐藏”样式,如下所示: form = form_class(initial={'field':data}) <li class="{{form.somefield.name}} {% if form.somefield.initial %} hidden{% endif %}> ... </li> {% for field in form %} <li c

我试着做一些非常简单的事情;当我传入一些初始值时,我希望对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 %}
通常情况下,情况如下:

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 %}

发现有一种更简单的方法可以做到这一点

{% if field.name in form.initial.keys %}
这个怎么样

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

带有初始键的解决方案对我不起作用,因为该字段包含一个空字符串作为值。我必须编写自己的自定义标记:

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 %}">

  • 可以通过
    值属性访问初始数据,初始数据表示字段的值:

    {{field.value}}