对Python Django的模板操作说明


在开发的时候发现Python Django的模板创建表单的做法确实感到有比较大的局限性,不过自定义forms也有比较让人称道的地方,在form中我们可以自定义验证规则,下面介绍说明一下Python Django的模板的操作。

最复杂功能最强大的还是freemarker,支持jsp tag的嵌入让我们可以重用很多已经存在的组件,这一点我在之前的文章中也有过比较详细的描述(强强联手,看freemarker和displaytag的结合)。

由于了解,才有发言权,Python Django的模板可以说是为互连网应用而诞生的,简洁及快速开发的特点让人情不自禁的喜欢。大多数模板语言的基本语法都是类似的,比如在freemarker中显示值是${},而在django是{{}},freemarker中if判断为<#if></#if>,而django中是:

  1. {% if msg %}     
  2.     Xx     
  3. {% else %}     
  4. Xx     
  5. {% endif%}   

再看看在django中渲染模板的方法,有两种:

  1. def preparePublish(request):     
  2.     t = loader.get_template(publishInfo)     
  3. return HttpResponse(t.render(Context({'categoryList' : None})))   

插一句题外话,关于jsp的题外话,不管是ruby,还是c++,还是python,在它们的web框架中都使用了模板,java中也有很多模板,我们最熟悉的是freemarker和velocity。这从一个侧面反映出我们web开发中的一个模式,那就是我们的view基本上是基于模板产生的,而jsp这个东西应该来说是时代的产物,在那个混乱的落后的时代产生的,不过很奇怪的是现在还有这么多人抱着它不放。

Django有两种form,一种是自己定义form class,还有一种是通过我们定义的model自动form class。 由于ahuaxuan只做 了一个信息发布的小例子,所以并不能全面的了解或者理解django中form的所有细节,不过从我涉及到的部分来讲。

我对Python Django的模板创建表单的做法确实感到有比较大的局限性,因为很多时候,model中的数据 并不是从页面上来的,在这种情况下,form对象被构造出来之后,ahuaxuan还没有找到修改form中值的方法。

而自定义form类也比较麻烦,就是要写自己的model,这个和我们之前的做法比较不一样,这里的form代表我们java中的value object,model是domain object,在我们的ssh框架中我们通常把value object继承我们的domain object。

虽然一堆又一堆的人提出了反对意见,说要把这两个对象分开,因为他们处在不同的层次中,但是从实践经验中,我们可以看到,这样做没有什么不好。而在django中自定义form和model分开的行为可能比较符合一些人的心理。 不过自定义forms也有比较让人称道的地方,在form中我们可以自定义验证规则。

同时我们可以根据form对象直接生成页面中的内容,不过这一点其实也有比较麻烦的地方,就是如果要改变样式的时候就比较麻烦,不过总的来说Python Django的模板的form还是比较有特点的,而且一定程度上给我们带来了方面。

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解 决方案
  5. 浅析Python的GIL和线程安全

相关内容

    暂无相关文章

评论关闭