Django 加载模板,在django.template.loader
模块中提供了两个方法用于加载模板:
get_template(template_name, using=None)
该方法接收一个模板名,返回Template对象。
select_template(template_name_list, using=None)
该方法接收一个模板名称的列表,返回第一个存在的Template对象。
当找不到对应的模板时,这两个方法都会返回TemplateDoesNotExist异常。如果模板找到了,但是模板中存在语法错误,返回TemplateSyntaxError异常。
对于不同的模板引擎,Template对象也是不同的,但是Template对象必须包含一个render()方法。Render的语法结构如下:
Template.render(context=None, request=None)。
参数说明:
- context是一个需要被展示到HTML文件上的数据集合,它是一个字典对象。如果render没有接收任何context,模板引擎就是直接渲染模板而不插入任何数据。
- request是一个HttpRequest对象。不同的模板引擎对request对象的处理方式不同。
假设存在如下模板配置。
下面是get_template()方法的模板查找顺序:
(1)/home/html/example.com/story_detail.html ('django' engine)
(2)/home/html/default/story_detail.html ('django' engine)
(3)/home/html/jinja2/story_detail.html ('jinja2' engine)
下面是select_template(['story_253_detail.html', 'story_detail.html'])
方法的模板查找顺序:
(1)/home/html/example.com/story_253_detail.html ('django' engine)
(2)/home/html/default/story_253_detail.html ('django' engine)
(3)/home/html/jinja2/story_253_detail.html ('jinja2' engine)
(4)/home/html/example.com/story_detail.html ('django' engine)
(5)/home/html/default/story_detail.html ('django' engine)
(6)/home/html/jinja2/story_detail.html ('jinja2' engine)
一旦Django找到了匹配的模板引擎,查询工作就会停止,即使后面存在其他匹配的模板文件也不会继续查询了。这样做可以通过子文件夹将不同应用程序的模板文件分别管理,使整个工程结构变得清晰。
如果使用文件路径查找模板的话,例如:
get_template('news/story_detail.html')
对于同样的模板配置,将会在下面的路径进行查找:
(1)/home/html/example.com/news/story_detail.html ('django' engine)
(2)/home/html/default/news/story_detail.html ('django' engine)
(3)/home/html/jinja2/news/story_detail.html ('jinja2' engine)
酷客教程相关文章:
评论前必须登录!
注册