DjangoのFormのレンダリング方法
動作確認用のFormとViewを準備する
forms.py
from django import forms class MyForm(forms.Form): name = forms.CharField(max_length=10) age = forms.IntegerField(min_value=0, max_value=120)
views.py
from django.views.generic import FormView from .forms import MyForm class MyFormView(FormView): form_class = MyForm template_name = 'my_form.html' def form_valid(self, form): print(form.cleaned_data) return super().form_valid(form)
レンダリングを全てFormクラスに任せる
templates/my_form.html
{{ form }}
フィールドを個別にレンダリングする
templates/my_form.html
<form action="" method="POST"> {% csrf_token %} {{ form.non_field_errors }} {{ form.name.label_tag }} {{ form.name }} {{ form.name.errors }} {{ form.age.label_tag }} {{ form.age }} {{ form.age.errors }} <button type="submit">作成</button> </form>
django-widget-tweaksでフィールドの属性を細かく制御する
templates/my_form.html
{% load widget_tweaks %} <form action="" method="POST"> {% csrf_token %} {{ form.non_field_errors }} {{ form.name.label_tag }} {% render_field form.name class+="class1 class2" placeholder="名前を入力してください" %} {{ form.name.errors }} {{ form.age.label_tag }} {{ form.age }} {{ form.age.errors }} <button type="submit">作成</button> </form>