我有许多选择框表单字段,我需要在模板中输出自定义标记作为列表。为此,我创建了一个include,它将当前表单字段作为参数传递。
我可以遍历选项列表来创建我想要的列表而不会出现任何问题。我的问题是,在选项列表上方,我需要显示表单标签或当前选定的值。这是我必须执行此操作的代码:
{% if field.value %}
{% for value, option in field.field.choices %}
{% if value == field.value %}
{{ option }}
{% endif %}
{% endfor %}
{% else %}
{{ field.label }}
{% endif %}
例如,如果上面代码中的value
为1,并且field.value
也为1,则相等性测试不起作用,并且if语句中的代码位不会被执行。我猜测它可能归结为我所比较的两个值的数据类型,所以我尝试将两者都转换为整数,如下所示:
{% if field.value %}
{% for value, option in field.field.choices %}
{% if value|add:"0" == field.value|add:"0" %}
{{ option }}
{% endif %}
{% endfor %}
{% else %}
{{ field.label }}
{% endif %}
这适用于选择框中的值为整数的情况。但是,有时我的选择框会将布尔值作为值,因此在这种情况下,比较将不适用于应用的整数转换。
无论比较什么类型的数据,我如何安全地比较这两个值?
答案 0 :(得分:0)
我想我找到了答案。
问题是所选值始终是一个字符串,并且forloop中的值可以是整数或布尔值(或可能是其他数据类型)。答案是将forloop中的值转换为字符串:
{% if field.value %}
{% for value, option in field.field.choices %}
{% if value|stringformat:"s" == field.value %}
{{ option }}
{% endif %}
{% endfor %}
{% else %}
{{ field.label }}
{% endif %}