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设计模式编程中的访问者与观察者模式
Jan 26 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
解读python logging模块的使用方法
Apr 17 Python
详解Python如何生成词云的方法
Jun 01 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
Keras 使用 Lambda层详解
Jun 10 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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 什么是PEAR?(第二篇)
2009/03/19 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python版简单工厂模式
2017/10/16 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
Pycharm Git 设置方法
2020/09/15 Python
教师求职信
2014/06/17 职场文书
研修心得体会
2014/09/04 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
货款欠条范本
2015/07/03 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python图片处理之图片裁剪教程
2021/05/27 Python
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis