Django:使用Django表单创建HTML输入数组

2024-05-21 05:06:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试自动创建如下内容:

<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />

通过骑自行车在一个范围内的形式。我一直在尝试这样的事情,还有其他几种变化:

# in a model class
for i in range(1, prim+1):
    self.fields['asdf'] = forms.CharField(label=i)

# in the template
<form action='#' method='post'>
    {{form.as_p}}
</form>

不过,我一点运气都没有。

如何实现输入数组的自动化?

**编辑** 为了澄清,最终我需要能够访问模板中的字段,如下所示:

{% for input in form.fields.asdf %}
{{input}}
{% endfor %}

希望能得到上面显示的原始输入列表。。。


Tags: textnameinform内容fieldsforinput
3条回答

看起来我可以通过将表单分成多个表单集来完成我需要做的事情。。。

http://docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets

然后,我应该能够从模板中单独访问每个表单集,将它们包装成一个

它应该更像是:

# in a model class
for i in range(1, prim+1):
    self.fields['asdf_%s' % i] = forms.CharField(label='Label %i' % i)

但这完全取决于你想要实现什么。

Jacob Kaplan Moss(Django的合著者)最近发表了一篇处理动态表单的文章,这篇文章应该可以用一种更好的方式解决您的问题: http://jacobian.org/writing/dynamic-form-generation/

他使用的方法和费利克斯建议的一样,但为了更好地理解这一概念,值得阅读整篇文章。

使用asdf[]技术是草率的,因为这样就必须处理排序问题。这也不是标准做法。

编辑:

要处理需要检测何时命中这些动态字段的情况,请执行以下操作:

{% for input in form.fields %}
    {% ifequal input.label 'asdf' %}
        {{ forloop.counter }}: {{input}}<br />
    {% endifequal %}
{% endfor %}

相关问题 更多 >