示例#1
0
    def _render_fieldset(self, fieldset, fields, normal_row, help_text_html,
                         errors_on_separate_row):
        output, hidden_fields = [], []

        if fieldset:
            output.append(
                normal_row % {
                    'errors': '',
                    'label': ' ',
                    'field': self.fieldset_template % {
                        'title': fieldset,
                        'section': slugify(fieldset),
                    },
                    'help_text': '',
                })

        #for name, field in [i for i in self.fields.items() if i[0] in fields]:
        for name in fields:
            field = filter(lambda f: f[0] == name, self.fields.items())[0][1]

            bf = BoundField(self, field, name)
            bf_errors = self.error_class([
                escape(error) for error in bf.errors
            ])  # Escape and cache in local variable.
            if bf.is_hidden:
                if bf_errors:
                    top_errors.extend([
                        u'(Hidden field %s) %s' % (name, force_unicode(e))
                        for e in bf_errors
                    ])
                hidden_fields.append(unicode(bf))
            else:
                if errors_on_separate_row and bf_errors:
                    output.append(error_row % force_unicode(bf_errors))
                if bf.label:
                    label = escape(force_unicode(bf.label))
                    # Only add the suffix if the label does not end in
                    # punctuation.
                    if self.label_suffix:
                        if label[-1] not in ':?.!':
                            label += self.label_suffix
                    label = bf.label_tag(label) or ''
                else:
                    label = ''
                if field.help_text:
                    help_text = help_text_html % force_unicode(field.help_text)
                else:
                    help_text = u''
                output.append(
                    normal_row % {
                        'errors': force_unicode(bf_errors),
                        'label': force_unicode(label),
                        'field': unicode(bf),
                        'help_text': help_text,
                        'field_name': unicode(name),
                    })

        return output, hidden_fields