0

フォームフィールドは、クラスのメソッドを介してhttps://github.com/earle/django-bootstrap/blob/master/bootstrap/templates/bootstrap/field_default.htmlのカスタムテンプレートによってレンダリングされます。ここに示されているコード:-render_fieldBootStrapMixin

def render_field(self, field):
    """ Render a named field to HTML. """

    try:
        field_instance = self.fields[field]
    except KeyError:
        raise NoSuchFormField("Could not resolve form field '%s'." % field)

    bf = forms.forms.BoundField(self, field_instance, field)

    output = ''

    if bf.errors:
        # If the field contains errors, render the errors to a <ul>
        # using the error_list helper function.
        # bf_errors = error_list([escape(error) for error in bf.errors])
        bf_errors = ', '.join([e for e in bf.errors])
    else:
        bf_errors = ''

    if bf.is_hidden:
        # If the field is hidden, add it at the top of the form
        self.prefix_fields.append(unicode(bf))

        # If the hidden field has errors, append them to the top_errors
        # list which will be printed out at the top of form
        if bf_errors:
            self.top_errors.extend(bf.errors)

    else:

        # Find field + widget type css classes
        css_class = type(field_instance).__name__ + " " +  type(field_instance.widget).__name__

        # Add an extra class, Required, if applicable
        if field_instance.required:
            css_class += " required"

        if field_instance.help_text:
            # The field has a help_text, construct <span> tag
            help_text = '<span class="help_text">%s</span>' % force_unicode(field_instance.help_text)
        else:
            help_text = u''

        field_hash = {
            'class' : mark_safe(css_class),
            'label' : mark_safe(bf.label or ''),
            'help_text' :mark_safe(help_text),
            'field' : field_instance,
            'bf' : mark_safe(unicode(bf)),
            'bf_raw' : bf,
            'errors' : mark_safe(bf_errors),
            'field_type' : mark_safe(field.__class__.__name__),
        }

        if self.custom_fields.has_key(field):
            template = get_template(self.custom_fields[field])
        else:
            template = select_template([
                os.path.join(self.template_base, 'field_%s.html' % type(field_instance.widget).__name__.lower()),
                os.path.join(self.template_base, 'field_default.html'), ])

        # Finally render the field
        output = template.render(Context(field_hash))

    return mark_safe(output)

問題は、次のように、divにmycustomclasscssクラスを導入する必要があることです。-controls

<div class="control-group{% if errors %} error{% endif %}">
    <label class="control-label">{{ label }}</label>
    <div class="controls mycustomclass">
        {{ bf }}
        {% if errors %}
        <span class="help-inline">{{ errors }}</span>
        {% endif %}
        <p class="help-block">{{ help_text }}</p>
    </div>
</div> <!-- /clearfix -->

render_field methodこれを達成するためにdjango-bootstrapを変更する最良の方法は何ですか?

明確化

以下の@okmで説明されているcss_classように、カスタムクラスを実行する必要があります。その後、テンプレート変数をの適切な場所に配置する'css': css_class必要があります。{{ css }}default_field.html

だから例えば、私が持っている場合

class MyForm(BootstrapForm):
    my_special_field = forms.ModelChoiceField(required=True)

と持っている

<div class="control-group{% if errors %} error{% endif %}">
    <label class="control-label">{{ label }}</label>
    <div class="controls {{ class }}">
        {{ bf }}
        {% if errors %}
        <span class="help-inline">{{ errors }}</span>
        {% endif %}
        <p class="help-block">{{ help_text }}</p>
    </div>
</div> <!-- /clearfix -->

レンダリングされたhtmlが表示されます

<div class="controls required">

ただし、関数で使用できるように、フォームコードでさらに多くの引数(たとえば** kwargsを使用)を指定するにはどうすればよいrender_fieldですか?

4

0 に答える 0