對Python Django的模板操作說明
在開發(fā)的時候發(fā)現(xiàn)Python Django的模板創(chuàng)建表單的做法確實(shí)感到有比較大的局限性,不過自定義forms也有比較讓人稱道的地方,在form中我們可以自定義驗(yàn)證規(guī)則,下面介紹說明一下Python Django的模板的操作。
最復(fù)雜功能***大的還是freemarker,支持jsp tag的嵌入讓我們可以重用很多已經(jīng)存在的組件,這一點(diǎn)我在之前的文章中也有過比較詳細(xì)的描述(強(qiáng)強(qiáng)聯(lián)手,看freemarker和displaytag的結(jié)合)。
由于了解,才有發(fā)言權(quán),Python Django的模板可以說是為互連網(wǎng)應(yīng)用而誕生的,簡潔及快速開發(fā)的特點(diǎn)讓人情不自禁的喜歡。大多數(shù)模板語言的基本語法都是類似的,比如在freemarker中顯示值是${},而在django是{{}},freemarker中if判斷為<#if></#if>,而django中是:
- {% if msg %}
- Xx
- {% else %}
- Xx
- {% endif%}
再看看在django中渲染模板的方法,有兩種:
- def preparePublish(request):
- t = loader.get_template(publishInfo)
- return HttpResponse(t.render(Context({'categoryList' : None})))
插一句題外話,關(guān)于jsp的題外話,不管是ruby,還是c++,還是python,在它們的web框架中都使用了模板,java中也有很多模板,我們最熟悉的是freemarker和velocity。這從一個側(cè)面反映出我們web開發(fā)中的一個模式,那就是我們的view基本上是基于模板產(chǎn)生的,而jsp這個東西應(yīng)該來說是時代的產(chǎn)物,在那個混亂的落后的時代產(chǎn)生的,不過很奇怪的是現(xiàn)在還有這么多人抱著它不放。
Django有兩種form,一種是自己定義form class,還有一種是通過我們定義的model自動form class。 由于ahuaxuan只做 了一個信息發(fā)布的小例子,所以并不能全面的了解或者理解django中form的所有細(xì)節(jié),不過從我涉及到的部分來講。
我對Python Django的模板創(chuàng)建表單的做法確實(shí)感到有比較大的局限性,因?yàn)楹芏鄷r候,model中的數(shù)據(jù) 并不是從頁面上來的,在這種情況下,form對象被構(gòu)造出來之后,ahuaxuan還沒有找到修改form中值的方法。
而自定義form類也比較麻煩,就是要寫自己的model,這個和我們之前的做法比較不一樣,這里的form代表我們java中的value object,model是domain object,在我們的ssh框架中我們通常把value object繼承我們的domain object。
雖然一堆又一堆的人提出了反對意見,說要把這兩個對象分開,因?yàn)樗麄兲幵诓煌膶哟沃?,但是從?shí)踐經(jīng)驗(yàn)中,我們可以看到,這樣做沒有什么不好。而在django中自定義form和model分開的行為可能比較符合一些人的心理。 不過自定義forms也有比較讓人稱道的地方,在form中我們可以自定義驗(yàn)證規(guī)則。
同時我們可以根據(jù)form對象直接生成頁面中的內(nèi)容,不過這一點(diǎn)其實(shí)也有比較麻煩的地方,就是如果要改變樣式的時候就比較麻煩,不過總的來說Python Django的模板的form還是比較有特點(diǎn)的,而且一定程度上給我們帶來了方面。
【編輯推薦】