Django Bootstrap Form

這篇也是拖很久了 XD 大概半年前 twitter bootstrap 出來的時候, 我就寫了 django bootstrap form 放上了 github, 然後就開始用在 production, 像是 myaudiocast, stickeraciton 跟 streetvoice 都有用上。

不過因為一直沒時間研究怎麼放上 pypi, 就想說也不方便 release, 畢竟不能透過 pip 安裝的話, 還是有點遜 XD 所以就一直沒有寫篇文章來正式發表, 一直到今天早上才研究了一下, 終於放上 pypi 了 :D

截至目前為止 django bootstrap form 有 46 個 watch, 也有一些人 fork, 至少有人用了, 哈。 稍微來說明一下怎麼使用好了。

首先, 透過 pip 安裝

1
$ pip install django-bootstrap-form

然後在 INSTALLED_APPS 加上 bootstrapform

1
2
3
4
INSTALLED_APPS = (
    # ...
    'bootstrapform',
)

接著在 template 裡面就可以開始用了

1
2
3
4
5
6
7
8
{% load bootstrap %}

<form method="post">
    {{ form|bootstrap }}
    <div class="actions">
        <input class="primary btn" type="submit" value="Save" />
    </div>
</form>

這樣馬上就給你一個符合 twitter bootstrap 樣式的表單了 :D

其實有另一個 django bootstrap 的 implement, django-bootstrap, 不過他是透過繼承 Form / ModelForm 來產生, 我覺得這是一個錯誤的方向, 雖然說他的 watch 跟 fork 多很多 XD

為什麼說他的方向是錯的, 首先, django 主要是以 app 的方式來搭建, 例如當你要安裝 django-bootatrap-form, 最直接的方式是透過 pip 來安裝, 安裝後這個 packages 會放在 site-packages 裡面, 而不是把 code 整個放進你的 repo。

所以如果你安裝了 django-userena 這個 packages 來處理你的會員登入/註冊, 你不可能直接修改 django-userena 裡面所有的 form 去繼承 django-bootstrap 的 form 阿。

即便你可以這麼做好了, 直接改 template 還是比改 form 簡單多了阿, 更何況是 django-bootstrap 要改 form 又要改 template XD

光從這一點就可以知道這是個錯誤的方向, 我不知道哪來這麼多人 watch / fork XD 另外就是, 之後的 django 也準備把原先 form 的方式給換掉, 因為把一些 html 寫在裡面開始有人覺得不對, 應該要抽出來。

其實一開始 django-bootstrap 作者跟我討論過我們兩個 implement 的方式, 要不要一起合力弄一個 django-bootstap 就好, 我只跟他說我覺得你的方式不太對, 跟我希望的不一樣, 還是分開搞好了 XD

最後, 有沒有 python developer 要來敝公司 StreetVoice 工作的阿? 歡迎來談談聊聊天阿 XD 請來信 tzangms [at] streetvoice.com

Comments