任何系统都是在不断的优化不断的发展,现在我以个人经验总结下Django模板系统的来龙去脉
未使用模板时的html硬编码
尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到视图里却并不是一个好主意。
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
开始使用模板系统Template,Context
模板是一个文本,用于分离文档的表现形式和内容,模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。
模板系统是一个Python库,可以在任何地方使用它,而不仅仅是在Django视图中。
在Python代码中使用Django模板的最基本方式如下:
可以用原始的模板代码字符串创建一个Template对象,Django同样支持用指定模板文件路径的方式来创建Template对象。
调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换。
代码如下:
>>> from django import template
>>> t = template.Template('My name is {
{ name }}.')
>>> c = template.Context({
'name': 'Adrian'})
>>> print t.render(c)
My name is Adrian.
必须指出的一点是,t.render(c)返回的值是一个Unicode对象,不是普通的Python字符串,可以通过字符串前的u来区分。在框架中,Django会一直使用Unicode对象而不是普通的字符串。如果明白这样做会带来多大便利,就可知道Django在后台有条不紊地做这些工作;如果不明白从中获益了什么,只需要知道Django对Unicode的支持,将让应用程序轻松地处理各式各样的字符集,而不仅仅是基本的A~Z英文字符。
from django.template import Template, Context
from django.http import HttpResponse
import datetime
def current_datetime