Django 的 Form 真的很好用。
Django 的 Form 表单真的很好用,完全把以往繁琐的表单操作完全抽象出来,成了一个独立的组件。
该系统的最大特色就是与模板无关,表单元素完全在一个文件里就可以定义好,以后也可以随时扩充,修改,很方便。
为了使用富文本编辑器我还使用了 InPlaceEditor,之所以用它是因为它基于强大的 TinyMCE 编辑器,同时提供了很好的 Ajax 支持,为了使用它我还使用了 django-tinymce,这个东西理论上应该找不到编译好的包,可以用 easy_install 安装(在 Fedora 10 里的 python-setuptools-devel 包里),总之就是怎么方便怎么来啦。 :-)
OK, Let&aposs get start it.
在 app 目录里建立一个 forms 的目录,touch 一个 __init__.py,然后在其中写下 newapp.py 文件,如下内容:
from django import forms from tinymce.widgets import TinyMCETYPE_CHOICES = [
[1, &aposDesktop Computer&apos],
[2, &aposLaptop&apos],
]class NewProduct(forms.Form):
name = forms.CharField()
type_id = forms.ChoiceField(choices=TYPE_CHOICES)
description = forms.CharField(widget=TinyMCE(mce_attrs={})
添加 View 里某个方法(比如 index)填上:
def index(request): from testproject.app.forms.newapp import NewProduct new_form = NewProduct() return render_to_response(&apostestform.html&apos, { &aposnew_form&apos : new_form })
然后改模板,类似如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.01//EN"> <html lang="en"> <head> <title>New Product</title> </head> <body> <h1>New Product</h1> <form action="." method="POST"> {{ new_form.as_table }} <p><input type="submit" value="Submit"></p> </form> </body> </html>
够好用吧?一个 form 定义好以后直接使用 as_table 方法就可以转换成表格。
如果需要更多自定义参数,也可以像访问数据库一样直接调用 form class 里的属性,如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.01//EN"> <html lang="en"> <head> <title>New Product</title> </head> <body> <h1>New Product</h1> <form action="." method="POST"> {{ new_form.name }} {{ new_form.type_id }} {{ new_form.description }} <p><input type="submit" value="Submit"></p> </form> </body> </html>
在 Django 的官方教程里,设计一个 form class 的 ChoiceField 使用的是 Tuple,而我这里经过试验,List 也是可以的,而之所以使用 List,是因为这样可以通过数据库,向 ChoiceField 里添加数据,如:
from django import forms from tinymce.widgets import TinyMCE from testproject.app.models import ProductTypestypes = ProductTypes.objects.all()
TYPE_CHOICES = []
for type in types:
TYPE_CHOICES.append([type.id, type.name])class NewProduct(forms.Form):
name = forms.CharField()
type_id = forms.ChoiceField(choices=TYPE_CHOICES)
description = forms.CharField(widget=TinyMCE(mce_attrs={})
嘿嘿,基本到此,还是比较简单的,附带一个我的 TinyMCE 的设置作为结尾好了。
from django import forms from tinymce.widgets import TinyMCE from testproject.app.models import ProductTypestypes = ProductTypes.objects.all()
TYPE_CHOICES = []
for type in types:
TYPE_CHOICES.append([type.id, type.name])class NewProduct(forms.Form):
name = forms.CharField()
type_id = forms.ChoiceField(choices=TYPE_CHOICES)
description = forms.CharField(widget=TinyMCE(mce_attrs={&apostheme&apos : "advanced",
&aposskin&apos : "o2k7",
&aposskin_variant&apos : "silver",
&aposelements&apos : &aposelm3&apos,
&aposmode&apos : &apostextareas&apos,
&apostheme_advanced_toolbar_location&apos : "top",
&apostheme_advanced_toolbar_align&apos : "left",
&apostheme_advanced_resizing&apos : &apostrue&apos,
&aposplugins&apos : "safari,pagebreak,style,layer,save,iespell,xhtmlxtras",
&apostheme_advanced_buttons1&apos : "fontselect,fontsizeselect,|,cut,copy,paste,pastetext,|,bullist,numlist,|,undo,redo,|,link,unlink",
&apostheme_advanced_buttons2&apos : "",
&apostheme_advanced_buttons3&apos : "",
})
不知道 Rails 或者其它 Web Framework 是否也有比较优秀的特色功能,希望也能有人能够介绍一下。
版权所有丨转载请注明出处:https://kxq.io/archives/django的form真的很好用