Google App Engine (Django) 模板之疑

December 18, 2008

昨天晚上试验Google App Engine (GAE),要在页面上显示一个时间的估计。我原本设计是在数据库中只存一个字段,即估计的分钟数,然后在页面上计算一下来显示,却被折腾了好几个小时,第一次试验有点失败,特记之。

我传到页面上的是一个对象数组,那么在页面上就得这么写:

{% for m in messages %}

  <li> {{m.name}} – {{m.estimateMinutes}} 分钟 </li>

{% endfor %}

嗯,运行没有错误,很高兴。接下来我想大家还是比较习惯看小时:分钟的方式呈现,于是改了一下逻辑。

{% for m in messages %}

  <li> {{m.name}} –

         {% if m.estimateMinutes >= 60 %}

             {{m.estimateMinutes/60}} 小时

         {% endif %}

         {% if m.estimateMinutes%60 >= 0 %}

             {{m.estimateMinutes%60}} 分钟

         {% endif %}

  </li>

{% endfor %}

这下问题来了,死活在比较大小和除法这些地方报错。根据以前使用JSTL、Ruby的RHTML等模板的经验,似乎没有问题啊。看了JavaEye上hideto翻译的TheDjangoBook第四章,也没找到关于这个问题的解释。后来换了几个关键字搜索也无果,于是到官方文档上仔细查看,终于在Philosophy里找到这么一句:

The Django template system provides tags which function similarly to some programming constructs – an if tag for boolean tests, a for tag for looping, etc. – but these are not simply executed as the corresponding Python code, and the template system will not execute arbitrary Python expressions.

原来模板是不支持数学运算的……枉费我这么时间。不过也算有收获,做东西之前还是不要急吼吼开工,基本的文档最好还是先溜一遍,特别是什么哲学之类的。

功能还是要完成啊,你让我在后台算完了贴上来?那岂不是太麻烦?还得在后台对所有的message做循环。我真的觉得这个哲学洁癖过分,显得有点蠢。后来在GAE Cookbook上看到可以把Jinja2 (另一个模板引擎) 整合到GAE中来,赶紧试验,不过发现似乎还不支持中文,渲染的时候会出错,还是过段时间吧。

好吧,算这个模板比较狠,我改数据库。添了一个estimateHours之后,世界清静了:

{% for m in messages %}

  <li> {{m.name}} –

         {% ifnotequal m.estimateHours 0 %}

             {{m.estimateHours}} 小时

         {% endifnotequal %}

         {% ifnotequal m.estimateMinutes 0 %}

             {{m.estimateMinutes}} 分钟

         {% endifnotequal %}

  </li>

{% endfor %}

但是,加上equal/notequal这些东东还不是引入了逻辑?我有点疑惑了。想一想模板的后果,是让我修改了模型层,难道模板的设计者还有让我们的模型层设计更加合理这种初衷?而且我也不知道这两种方法格外有多大的不同啊,囧。

好了,疑惑就疑惑到这里,还是要认真学习。而且模板也是在发展嘛,说不定GAE开发团队听到了开发者的心声就把这一点改掉了呢:)

hideto同学很勤奋,他翻译的The Django Book应该好好看看,尤其是:

第四章:Django模板系统

第十章:深入模板引擎

posted in Google App Engine by cowoo

Follow comments via the RSS Feed | Leave a comment | Trackback URL

2 Comments to "Google App Engine (Django) 模板之疑"

  1. superpippo wrote:

    hideto他们公司有一个HIT的,在程序员上看过他的文章

  2. cowoo wrote:

    hideto不是JavaEye的么?我一直以为他是JavaEye的员工呢。。。

Leave Your Comment

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org