Django模板标记以获取特定的表单字段

时间:2011-05-23 21:22:40

标签: django django-templates

我有一个调查应用程序,可以创建动态大小的形式。我使用公式“question_id_part”,其中问题是固定的,id是被问题的id,部分是三个部分之一。

在我的模板中,我需要能够按类别对这些进行分组,因此我遍历调查中的类别,获取该类别中的所有问题,然后我有一个模板标记来获取我的表单字段。< / p>

{% load my_tags %}
...
{% for category in survey.category_set.all %}
    <h3>{{category}}</h3>
    {% for question in category.factor_set.all %}
        {% get_field_for_question_part question.id form "type" %} 
    {% endfor %}
{% endfor %}
...

然后我有一个相应的模板标签,如下所示:

@register.simple_tag
def get_field_for_question_part(question_id, form, part):
    field_name = "question_%s_%s" % (question_id, part)
    field = form.fields[field_name]
    return BoundField(form, field, field_name)

我的问题是: 通过显式导入BoundField,我的模板标签非常了解表单如何在内部工作,因此对表单的非公开行为的未来变化很脆弱。因此,在我看来,BoundField应该可以某种方式作为一种方法在场上访问 - 但对于我的生活,我无法弄清楚那种方法会是什么。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

尝试:

@register.simple_tag
def get_field_for_question_part(question_id, form, part):
    field_name = "question_%s_%s" % (question_id, part)
    return form.__getitem__(field_name)

请参阅第101行的方法定义:django/forms/forms.py