使用Django Python创建动态表单并在自定义模板表中显示

时间:2013-04-01 18:40:20

标签: python html django forms dynamic

我正在创建一个Web应用程序,它将在表格中显示学生列表,并在每个名称旁边显示一个输入字段,允许用户为该学生提供“标记”。我无法弄清楚如何将这一切整合到表格中。

这是我在forms.py中声明的表单:

class TagsForm(forms.Form):
    def __init__(self, *args, **kwargs):
        applicants = kwargs.pop('applicants')
        super(TagsForm,self).__init__(*args, **kwargs)
        for i, applicant in enumerate(applicants):
            self.fields['tag_%s' % i] = forms.CharField(label=applicant)

    def tagInput(self):
        for tags in self.cleaned_data.items():
            if tags.startswith('tag_'):
                yield (tags)

然后在view.py中创建表单并将其传递到上下文中:

tags_form = TagsForm(request.POST or None, applicants=applicantQuery)
if tags_form.is_valid():
    for(tags) in tags_form.tagInput():
        ...
...
context = Context({'tagsForm':tags_form, ... }
return render_to_response('review/assignment.html', context)

正如您所看到的,我正在尝试为将要在表格中显示的每个申请人创建一个字符输入“标记”字段。然后在我的模板中我有这个:

<form name="applicants" method="POST">
<table class="sortable" id="appTable">
<tr> 
     <th>EID</th>
     <th>Name</th>
     <th>Reviewer Tags</th>
</tr>

{% for applicant in applicants %}
<tr>
    <td> <a href="../../{{ applicant.app_id }}/overview" target="_blank">{{ applicant.app_eid }}</a></td>   

    <td> {{ applicant.app_displayName }} </td>
    <td> {{ tagsForm.tags_???}} </td>
</tr>
{% endfor %}

</table><br />
{{ tags_form.non_field_errors }}
<input type="submit" value="Submit Tags"/>
</form>

我不知道如何遍历tagsForm标签字段,因为我已经在遍历申请人。我是Django / HTML的新手,所以解决方案可能非常简单,但是我搜索并找不到任何试图做这样的事情的人。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么在这里遇到问题。你为什么要迭代某些事情已经阻止你迭代其他东西? Django模板中的嵌套循环与在任何其他编程环境中一样可能。

虽然你的代码没有太深入,但看起来你应该只能做for tag in applicant.tags