Djagnoのフォーム幅を整える方法

スポンサードリンク



こんにちは。sinyです。

この記事では下図のようにDjangoの入力フォームの幅を揃える簡単な方法をご紹介します。

 

前提

今回はユーザ登録画面のフォームを整形する例で説明します。

forms.pyやviews.py等の設定は本記事の趣旨ではないため割愛します。

ユーザ登録画面のフォームを表示する部分のhtmlは以下のようなコードを記載している前提で進めます。

<form action="" method="POST" >
           
{% csrf_token %}
{% for field in form %}
<div class="form-group">
{{ field.label }}: {{ field}}
 </div>
 {% if field.errors %}
 <div class="alert alert-danger" role="alert">{{ field.errors }}</div>
 {% endif %}
 {% endfor %}
<div class="row">
 <div class="col-xs-4">
 <button type="submit" class="btn btn-primary btn-block btn-flat">登録</button>
</div>
</div>
</form>

この状態では、冒頭の画像の左側のようにフォームラベルの長さによってフォームの位置がずれて見栄えが悪くなってしまいます。

django-widget-tweaksを使ってデザインを整える

そこで、django-widget-tweaksを利用すると簡単にデザインを整えることができます。

まずはpipコマンドでインストールします。

pip install django-widget-tweaks

 

settings.pyに 'widget_tweaks'を追加します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts.apps.AccountsConfig',
    'widget_tweaks',   #追加する
]

 

テンプレートファイルの冒頭に{% load widget_tweaks %}を追加します。
こうすることでwidget_tweaksの機能をテンプレート内で利用できるようになります。

ではテンプレートのフォームを表示している部分を以下の通り修正します。

{{ field.label }}: {{ field}} 

{{ field.label }}: {{ field |add_class:"form-control"}}

 

フォームを表示している{{field}}の部分に|add_class:"form-control"をつけることでフォームにclassの定義を設定することができます。

これで画面を更新すると以下のようにデザインが変わります。

render_fieldテンプレートタグを利用してHTMLのような構文を使用してDjangoフィールドを柔軟にレンダリングすることもできます。

{% render_field  field class="form-control" placeholder=field.label %}

フォームのクラスにform-classを指定し、placeholderにフォーム名を設定しています。
これで以下のような画面デザインに変更されます。

widget_tweaksを使うとこのように簡単にフォームを整形することができるので便利ですね。
以上、「Djagnoのフォーム幅を整える方法」でした。

 

おすすめの記事