Django中模版的子目录与include标签的使用方法

作者:goldensun 时间:2022-07-13 03:58:40 

get_template()中使用子目录

把所有的模板都存放在一个目录下可能会让事情变得难以掌控。 你可能会考虑把模板存放在你模板目录的子目录中,这非常好。 事实上,我们推荐这样做;一些Django的高级特性(例如将在第十一章讲到的通用视图系统)的缺省约定就是期望使用这种模板布局。

把模板存放于模板目录的子目录中是件很轻松的事情。 只需在调用 get_template() 时,把子目录名和一条斜杠添加到模板名称之前,如:


t = get_template('dateapp/current_datetime.html')

由于 render_to_response() 只是对 get_template() 的简单封装, 你可以对 render_to_response() 的第一个参数做相同处理。

return render_to_response('dateapp/current_datetime.html', {'current_date': now})

对子目录树的深度没有限制,你想要多少层都可以。 只要你喜欢,用多少层的子目录都无所谓。

注意

Windows用户必须使用斜杠而不是反斜杠。 get_template() 假定的是 Unix 风格的文件名符号约定。

include 模板标签

在讲解了模板加载机制之后,我们再介绍一个利用该机制的内建模板标签: {% include %} 。该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

下面这两个例子都包含了 nav.html 模板。这两个例子是等价的,它们证明单/双引号都是允许的。


{% include 'nav.html' %}
{% include "nav.html" %}

下面的例子包含了 includes/nav.html 模板的内容:


{% include 'includes/nav.html' %}

下面的例子包含了以变量 template_name 的值为名称的模板内容:


{% include template_name %}

和在 get_template() 中一样, 对模板的文件名进行判断时会在所调取的模板名称之前加上来自 TEMPLATE_DIRS 的模板目录。

所包含的模板执行时的 context 和包含它们的模板是一样的。 举例说,考虑下面两个模板文件:


# mypage.html

<html>
<body>
{% include "includes/nav.html" %}
<h1>{{ title }}</h1>
</body>
</html>

# includes/nav.html

<div id="nav">
 You are in: {{ current_section }}
</div>

如果你用一个包含 current_section的上下文去渲染 mypage.html这个模板文件,这个变量将存在于它所包含(include)的模板里,就像你想象的那样。

如果{% include %}标签指定的模板没找到,Django将会在下面两个处理方法中选择一个:

  1.     如果 DEBUG 设置为 True ,你将会在 Django 错误信息页面看到 TemplateDoesNotExist 异常。

  2.     如果 DEBUG 设置为 False ,该标签不会引发错误信息,在标签位置不显示任何东西。

标签:Django,子目录,include
0
投稿

猜你喜欢

  • python 百度aip实现文字识别的实现示例

    2023-12-15 19:53:47
  • Oracle 触发器的使用小结

    2009-05-24 19:54:00
  • python可迭代类型遍历过程中数据改变会不会报错

    2021-04-15 19:40:52
  • 用uWSGI和Nginx部署Flask项目的方法示例

    2023-12-07 22:42:37
  • ASP保存远程图片到本地 同时取得第一张图片并创建缩略图的代码

    2011-04-19 11:07:00
  • 学会sql数据库关系图(Petshop)

    2012-10-07 10:34:49
  • 如何在Python里使用ChatGPT及ChatGPT是什么?注册方式?

    2022-12-01 22:43:12
  • python编写计算器功能

    2022-10-29 14:07:33
  • MySQL借助DB实现分布式锁思路详解

    2024-01-16 03:17:13
  • python循环定时中断执行某一段程序的实例

    2023-10-09 22:11:20
  • python机器学习sklearn实现识别数字

    2023-08-18 17:57:19
  • sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】

    2011-09-30 11:09:37
  • oracle使用sql语句增加字段示例(sql删除字段语句)

    2024-01-22 03:22:39
  • 一步一步教你网站同步镜像(转载)

    2024-01-21 03:38:11
  • CSS实现HTML元素透明的那些事

    2010-02-01 12:34:00
  • Python自动发邮件脚本

    2022-12-31 18:31:29
  • ORACLE数据库应用开发常见问题及排除

    2010-07-26 13:17:00
  • FCKEDITOR 的高级功能和常见问题的解决方法

    2023-12-16 16:07:13
  • python matplotlib绘制三维图的示例

    2023-03-04 16:35:48
  • Python编写生成验证码的脚本的教程

    2021-09-13 14:32:22
  • asp之家 网络编程 m.aspxhome.com