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字符串连接方式汇总
Aug 21 Python
深入理解Python中字典的键的使用
Aug 19 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
selenium+python实现自动化登录的方法
Sep 04 Python
django使用admin站点上传图片的实例
Jul 28 Python
python  logging日志打印过程解析
Oct 22 Python
Python中的四种交换数值的方法解析
Nov 18 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Django框架models使用group by详解
Mar 11 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
python 制作简单的音乐播放器
Nov 25 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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
vue 弹出遮罩层样式实例
2020/07/22 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
带你了解python装饰器
2017/06/15 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
实例详解Python装饰器与闭包
2019/07/29 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
党支部书记岗位责任制
2014/02/11 职场文书
小学生元旦广播稿
2014/02/21 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
唐山大地震观后感
2015/06/05 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript