• 7
  • Jan

今天下午12点到15点本是Sql Server的课程设计,可是我却在机房看起了Django,还一边看一边在Windows XP上安装上了Python和Django进行调试。全英文的Django Book看的有点晕,不过好在可以上爱词霸查单词,真是充满乐趣啊。

下午大致看完了Django的第四章──Template System,这里做下笔记吧。

-----

Django有比较先进的模版系统,通过它,能使站点的Python代码和HTML代码分离。这样网站美工可以让别人来做,自己只管核心就行了:)

在django.template中,Django使用Context和Template这两个类来处理这些。

Template本身相当于一段HTML代码,由标准的HTML代码和特殊标记的部分组成,其中特殊标记的部分就是用Context来根据本身对应填充。

Template解析的过程有点像词典里面找解释的过程,Context算作一个词典,Template解析就是从Context里面找对应的值的过程,当然不仅仅是值,也可以是方法,只是这个方法不能有参数。

主要的“特殊标记”是:

  • {{ variable }}:代表某个健,它会找到对应值,可以有子属性,如{{ variable.id }},同样只要传入词典variable就行,其他它会自己找,子属性也可以是方法或是其他,只是不能有参数,查找的顺序是:“词典”、“属性”、“方法”和“下标”;
  • {% if ordered_warranty %}:if的判断语句,可以有else,用not、or、and来判断是否,但是不能同时在一行有and和or,如果一定要and和or,那只能用嵌套语句,要以{% endif %}结束;
  • {% for item in item_list %}:模版里的For循环,虽然不能Break,但是有forloop这个有用的东西,要以{% endfor %}结束;
  • {{ ship_date|date:"F j, Y" }}:过滤功能,将前面一个值以后面的形式来显示,可以多重过滤;
  • {% ifequal user currentuser %}:这个用来判断两个值是否相等,也可用ifnotequal来判断是否相等,其中值不能用True/False,或者列表、词典;
  • {# comment#}:这是注释,不支持多行注释;

除此之外,就是实际的应用了。使用Django,你可以将写好的HTML模版放在一个目录下,然后在settings.py设置好路径,接下来就可以用django.template.loader的.get_template方法来自动找到模版并解析之。非常灵活!

就看到这里了,明天继续!

放上一个最简单的例子:

>>> from django.template import Context, Template

>>> t = Template("My name is {{ name }}.")

>>> c = Context({"name": "Stephane"})

>>> t.render(c)

'My name is Stephane.'

Tags: android, Django, Mono.

» You can leave a comment.

4 Comments

  1. 个人感觉django模板系统更强大的是它的block,filter,在展示层设计上更容易保持灵活性。:-)
    好像注释可以多行的,针对python注释,直接让它变量化,针对html注释,这个就是插入注释符好了。

  2. 昨天还未看到Template Inheritance这节,今天一看,Django的模板系统果然不仅仅如此,Block才是最强大的。
    elo应该是前辈吧?看了你的个人Blog,有讲Ajax和Django,马上订阅了:)呵呵

  3. rem1x

    忘记填邮箱了,结果内容全不见了,又要重新打...
    你学习的速度真的是惊人......我要努力的追赶,嘿嘿
    你那本gtk的书有几页,我有个猥琐的想法,帮我复印一本,然后寄给我,嘿嘿

  4. 那个打印GTK+这本书比较麻烦,上次我弄了半个月才弄好,你真的也要打印吗?如果不是很必要,我建议看电子版的。毕竟这不是像工具书一样要常常拿在手里的。

  5. 其实也很正常,mono基本上能通杀平台,只要资源够。关键是你有没有用到MS的库。

Leave a Comment