我正在尝试做一些非常简单的事情;当我传入一些像这样的初始值时,我想将一个“隐藏”样式应用于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只将值定义为表单中字段的首字母,而不是在表单创建时传入的数据。除了将迭代分解为单独的形式之外,还有一个很好的解决方案吗?
我想到的一些(坏)解决方案:
答案 0 :(得分:4)
怎么样?
{% for field in form %}
{% if field.name in field.form.initial.keys %}
...
{% endif %}
{% endfor %}
答案 1 :(得分:1)
可以在value
属性上访问初始数据,初始数据代表该字段的值:
{{field.value}}
答案 2 :(得分:0)
事实证明,有一种更简单的方法可以做到这一点。
{% if field.name in form.initial.keys %}
答案 3 :(得分: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 %}">