2017-11-17 1 views
1

Ich versuche, eine selectdatewidget in django heraus manuell zu machen, damit ich mit Bootstrap anpassen können. Allerdings bin ich mir nicht sicher, wie ich die einzelnen Eingaben mit dem Selectdatewidget rendere?Django selectdatewidget wie manuell zu machen?

class ProfileForm(forms.Form): 

    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 

    eighteen_years_from_now = (datetime.datetime.now().year - 18) 
    date_of_birth = FieldBuilder(User, 'date_of_birth', widget=SelectDateWidget(
     years=range(eighteen_years_from_now, 1919, -1))) 

Vorlage ein einzelnes Feld zu machen:

<div class="form-group"> 
    <label for="{{ field.id_for_label }}" class="sr-only"> 
    {{ field.label }} 
    </label> 
    {% if form.is_bound %} 
    {% if field.errors %} 
     {% render_field field class="form-control is-invalid" %} 
     {% for error in field.errors %} 
     <div class="invalid-feedback"> 
      {{ error }} 
     </div> 
     {% endfor %} 
    {% else %} 
     {% render_field field class="form-control is-valid" %} 
    {% endif %} 
    {% else %} 
    {% render_field field class="form-control" placeholder=field.label %} 
    {% endif %} 

    {% if field.help_text %} 
    <small class="form-text text-muted">{{ field.help_text }}</small> 
    {% endif %} 
</div> 

Antwort

1

Die kurze Antwort ist, dass Sie nicht die Kontrolle bekommen benötigt, ohne die eingebaute django Vorlage überschrieben.

Zum Glück Django 1.11 geändert, um das Widget-System-Templates zu verwenden, anstatt Python-Code dieses leichter zu überschreiben. aus den Vorlagen in django/forms/templates/django/forms/widgets überprüfen wir können sehen, dass das Datum auswählen Widget die multiwidget Vorlage lädt für jede subwidget, die das Widget-Schablone lädt: {% for widget in widget.subwidgets %}{% include widget.template_name %}{% endfor %}

Für ausgewählte Datum Widget dies bedeutet, dass die Ausgabe der 3 select-Tags (Monat, Tag, Jahr) nebeneinander. Dies kann nicht zB wird inline mit Bootstrap gemacht als je <select> Bedürfnisse in einem div mit dem entsprechenden CSS class gewickelt werden. https://docs.djangoproject.com/en/1.11/ref/forms/renderers/#overriding-built-in-widget-templates

:

Vorlagen können, indem Sie die django docs hier außer Kraft gesetzt werden,

Verwandte Themen