読者です 読者をやめる 読者になる 読者になる

django.newforms

Python

 Googleグループでの議論を一通り読んで、Headリビジョンのコードに目を通したのですが、いまいち、この議論の背景、動機が分かりません。(酔っぱらってるからかなぁ・・・)
 もう少しDjangoに慣れれば、この議論の背景を理解できるのかと思いますが、現時点での自分の無知を記録しておくために、あえて、以下の感想を記述しておきます。「私が愚かでした。Djangoは素晴らしいです」、と後で書けることが理想ですね。


 正直に言うと僕は、DjangoのManipulatorとは何か、といったDjangoの基本を、まだ理解していないのですが、そんな素人の目にも、Djangoは、この週末の間に、プロジェクトの将来を左右するような、非常に大きな決断を行おうとしているように見えます。


 ただ、ASP.NETやTapestory等のコンポーネント指向のフレームワークを散々研究してきた人間としては、Djangoの現時点でのnewformsの実装は、非常に貧弱に見えます。(Djangoに対して公平に述べるならば、TurboGearsのWidgetsの実装もまた貧弱だと思います。)
 しかし、もしDjangoが完全なコンポーネント指向フレームワークに舵を切ろうとしているならば、歓迎したいです。
 あるいは、現時点のDjangoの設計と、コンポーネント指向フレームワークの間でバランスをとろうとするならば、それもまた見物です。(Djangoチームのセンスとコーディング能力は、ずば抜けているので、彼らがどんな選択をしようとも一見の価値はあります。)


 django.newformsのコード量は非常に少なく、現時点ではあまりメリットは見えてこないのですが、今後の動向は見守りたいです。
 rev.3946では、widgetsとして、TextInput, Textarea, CheckboxInputが実装されているようで、次のような出力が可能です。

import django.newforms

ti = django.newforms.TextInput(attrs = dict(id='first_name', maxlength='50'))
print ti.render('name', 'Hello World')
# output
# <input value="Hello World" type="text" id="first_name" name="name" maxlength="50" />

ta = django.newforms.Textarea(attrs = dict(rows='6', cols='50'))
print ta.render('comment', 'Hello World')
# output
# <textarea rows="6" cols="50" name="comment">Hello World</textarea>

checkbox = django.newforms.CheckboxInput(attrs = dict())
print checkbox.render('comment', True)
# output
# <input checked="checked" type="checkbox" name="comment" />