Django 加载模板

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对象的处理方式不同。

假设存在如下模板配置。
Django 加载模板

下面是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)

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!