Formクラスからメディアを定義する

template内にJavascript/CSSを定義する以外に、DjangoはFormクラスからも
定義すること出来ることにより、動的にtemplateを修正することなくJavascript/CSSを
定義出来ます。

Form作成

ToggleFormText plug-in exampleを例に進めていきます。
まずは、Formクラスを使ってページを作成して表示してみましょう。

forms.py

from django import forms
from django.forms import Textarea

class ContactForm(forms.Form):
    name = forms.CharField(max_length = 50)
    email = forms.EmailField()
    message = forms.CharField(widget = Textarea)

watermark.html

<html>
<head>
    <title></title>
</head>
<body>
    <H1>Contact Form</H1>
    <table>
    {{ form.as_table }}
    </table>
</body>
</html>

表示したページは以下のようになります。

formmedia01_01

Form Mediaを使ったFormクラスへ

まずはToggleFormText plug-in exampleからpluginをダウンロードし設置します。

メディア定義を追加し、ToggleFormText plug-in exampleの仕様にあわせて属性を追加します。
CSSはAdmin siteのものを流用してみました。

forms.py

from django import forms
from django.forms import Textarea

class ContactForm(forms.Form):
    name = forms.CharField(
        max_length = 50, 
        widget = forms.TextInput(
            attrs = {'size': 50, 'title': 'name (required)'}))
    email = forms.EmailField()
    message = forms.CharField(widget = Textarea)

    class Media:
        js = ('/media/js/jquery.js',
              '/media/js/watermark/jquery.toggleformtext.js',
        )

        css = {
            'all': ('/media/css/base.css', '/media/css/forms.css')
        }

templateのhead内にメディアオブジェクトを格納する変数を追加します。

watermark.html

<html>
<head>
    <title></title>
    {{ form.media }}
</head>
<body>
    <H1>Contact Form</H1>
    <table>
    {{ form.as_table }}
    </table>
</body>
</html>

作業は以上です。 表示してみましょう。

formmedia01_02

Form Mediaは便利なので積極的に使用していきたい機能です。
そのためにも、templateにMediaオブジェクトを格納できる変数を常に記述しておきましょう。

twitter 2010-01-19 15:11:27.056276

関連ページ

参照サイト

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編