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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python分析网页上所有超链接的方法
May 08 Python
Python 序列的方法总结
Oct 18 Python
python中import reload __import__的区别详解
Oct 16 Python
Python 3 判断2个字典相同
Aug 06 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
python基于opencv实现人脸识别
Jan 04 Python
如何判断pytorch是否支持GPU加速
Jun 01 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python实现基于POS算法的区块链
2018/08/07 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python实现淘宝购物系统
2019/10/25 Python
浅析Python3 pip换源问题
2020/01/06 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
擅自离岗检讨书
2014/02/11 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
保证书格式
2015/01/16 职场文书
工作保证书
2015/01/17 职场文书
军事博物馆观后感
2015/06/05 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
MySql数据库触发器使用教程
2022/06/01 MySQL