Django 模板标签 {{ form.my_field_xxx }}

1 投票
1 回答
686 浏览
提问于 2025-04-18 06:24

我在一个Django表单上,在初始化函数中添加了X个字段。

def __init__(self, *args, **kwargs):
    quantity = kwargs.get('quantity')
    for i in range(quantity):
        self.fields['first_field_%s' % i] = forms.CharField(label='HI Number', widget=forms.TextInput(attrs={'readonly': 'readonly'}))

在我的HTML模板中,我也想在这里进行循环。

{% for x in form.quantity.value|get_range %}  # range filter i added
    <div>
        {{ form.first_field_x }}
    </div>
{% endfor %}

这里的x是一个数字,比如说:form.first_field_1,form.first_field_2。

如果我直接把数字放在这里,我当然会得到一个绑定的字段。

我也可以在模板中直接用HTML自己创建这些字段。

但是有没有办法把X替换成一个数字,这样结果就会是一个绑定的字段呢?

1 个回答

1

不,这样做是不行的,因为Django模板引擎有一些限制。

不过,有一个更简单的解决办法——把“my_fields”变成一个数组,然后用数组的索引来访问它,而不是把索引号放在变量名里。

def __init__(self, *args, **kwargs):
    quantity = kwargs.get('quantity')
    my_fields = []
    for i in range(quantity):
        my_fields.append(forms.CharField(label='HI Number', widget=forms.TextInput(attrs={'readonly': 'readonly'})))
    self.fields['my_fields'] = my_fields

然后在模板中:

{% for x in form.quantity.value|get_range %}  # range filter i added
    {{ form.my_fields[x] }} 
{% endfor %}

撰写回答