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


Posted in Python onJuly 16, 2015

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 ,该标签不会引发错误信息,在标签位置不显示任何东西。

Python 相关文章推荐
python 循环遍历字典元素的简单方法
Sep 11 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
基于python3实现socket文件传输和校验
Jul 28 Python
详解python分布式进程
Oct 08 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
对python周期性定时器的示例详解
Feb 19 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
pandas-resample按时间聚合实例
Dec 27 Python
Python操作Word批量生成合同的实现示例
Aug 28 Python
django有哪些好处和优点
Sep 01 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
实例详解Python的进程,线程和协程
Mar 13 Python
Django中使用locals()函数的技巧
Jul 16 #Python
Django框架中render_to_response()函数的使用方法
Jul 16 #Python
在Python的Django框架中加载模版的方法
Jul 16 #Python
Django框架下在视图中使用模版的方法
Jul 16 #Python
详解Django中的过滤器
Jul 16 #Python
在Python的Django框架中为代码添加注释的方法
Jul 16 #Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 #Python
You might like
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
python实现关键词提取的示例讲解
2018/04/28 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
python实现学生成绩测评系统
2020/06/22 Python
Python实现播放和录制声音的功能
2020/08/12 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
美国在线奢侈品寄售商店:Luxury Garage Sale
2018/08/19 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
《小小的船》教学反思
2016/02/18 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫