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中的迭代器与生成器高级用法解析
Jun 28 Python
基于python log取对数详解
Jun 08 Python
Python实现图片拼接的代码
Jul 02 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
Python常见的pandas用法demo示例
Mar 16 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
python实现网站微信登录的示例代码
Sep 18 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python 生成任意形状的凸包图代码
Apr 16 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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 定界符 使用技巧
2009/06/14 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
Django用户身份验证完成示例代码
2020/04/03 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
电子专业推荐信范文
2013/11/18 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
个人年终总结怎么写
2015/03/09 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书