2017-11-17 50 views
1

私はブートストラップでカスタマイズできるので、手動でdjangoのselectdatewidgetをレンダリングしようとしています。しかし、私はselectdatewidgetでindvidual入力をどのようにレンダリングするかについてはっきりしていませんか?Django selectdatewidget手動でレンダリングする方法は?

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))) 

テンプレートは、個々のフィールドをレンダリングします

<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> 

答えて

1

短い答えはあなたが作り付けのDjangoテンプレートを上書きせずに、必要な制御を得ることができないということです。

ありがたいことに、Django 1.11では、Pythonコードではなくテンプレートを使用してウィジェットシステムをオーバーライドしやすくなっています。 django/forms/templates/django/forms/widgetsでテンプレートを見直すことから、我々は選択した日付のウィジェットは、各サブウィジェット用のウィジェットテンプレートをロードmultiwidgetテンプレートをロードしていることがわかります。 {% for widget in widget.subwidgets %}{% include widget.template_name %}{% endfor %}

選択日付ウィジェットの場合、これは出力が3個の選択タグ(月、ある意味日、年)を隣り合っています。例えば、<select>divに適切なCSS classでラップする必要があるため、ブートストラップとインラインで作成することはできません。

テンプレートは、ここではDjangoのドキュメントを以下で上書きすることができます。 https://docs.djangoproject.com/en/1.11/ref/forms/renderers/#overriding-built-in-widget-templates

関連する問題