【问题标题】:Django template tag {{ form.my_field_xxx }}Django 模板标签 {{ form.my_field_xxx }}
【发布时间】:2014-07-01 03:14:36
【问题描述】:

我有一个 django 表单,我在 init 函数的表单中添加 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 替换为数字,以便结果是绑定字段?

【问题讨论】:

    标签: python django forms django-templates django-template-filters


    【解决方案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 %}
    

    【讨论】:

    • 这将如何影响我输入的 ID 属性?目前我有一整套使用这个索引号的 jquery。
    • 我不知道。您尚未提供有关您的 jquery 设置的任何详细信息。
    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 2011-02-09
    • 2012-10-31
    • 2014-03-20
    • 1970-01-01
    • 2011-01-07
    • 2018-10-21
    • 2014-07-25
    相关资源
    最近更新 更多