Django模板的include机制
2016-07-15 00:00
507 查看
写过 Web 程序的都对 include 包含文件很熟悉,那么在 Django,include 又是怎么一个机制呢?
下面这两个例子都包含了 nav.html 模板。这两个例子是等价的,它们证明单/双引号都是允许的。
下面的例子包含了 includes/nav.html 模板的内容:
下面的例子包含了以变量 template_name 的值为名称的模板内容:
也就是说,加载的模板名还可以在 view 层中定义。
和在 get_template() 中一样, 对模板的文件名进行判断时会在所调取的模板名称之前加上来自 TEMPLATE_DIRS 的模板目录。
所包含的模板执行时的 context 和包含它们的模板是一样的。 举例说,考虑下面两个模板文件:
如果你用一个包含 current_section的上下文去渲染 mypage.html这个模板文件,这个变量将存在于它所包含(include)的模板里,就像你想象的那样。
如果{% include %}标签指定的模板没找到,Django将会在下面两个处理方法中选择一个:
如果 DEBUG 设置为 True ,你将会在 Django 错误信息页面看到 TemplateDoesNotExist 异常。
如果 DEBUG 设置为 False ,该标签不会引发错误信息,在标签位置不显示任何东西。
include 模板标签
在讲解了模板加载机制之后,我们再介绍一个利用该机制的内建模板标签: {% include %} 。该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。下面这两个例子都包含了 nav.html 模板。这两个例子是等价的,它们证明单/双引号都是允许的。
{% include 'nav.html' %} {% include "nav.html" %}
下面的例子包含了 includes/nav.html 模板的内容:
{% include 'includes/nav.html' %}
下面的例子包含了以变量 template_name 的值为名称的模板内容:
{% include template_name %}
也就是说,加载的模板名还可以在 view 层中定义。
和在 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将会在下面两个处理方法中选择一个:
如果 DEBUG 设置为 True ,你将会在 Django 错误信息页面看到 TemplateDoesNotExist 异常。
如果 DEBUG 设置为 False ,该标签不会引发错误信息,在标签位置不显示任何东西。
相关文章推荐
- 理解Django里的MTV开发模式
- GO语言range的用法
- pgoneproxy的VIP机制
- go语言beego框架 orm实现insertOrUpdate功能
- 大话设计模式(golang) 五、工厂方法模式
- 【题】【线段树】NKOJ 2052 【USACO 2013 January Gold】座位
- golang
- go发送邮件
- Pokémon GO国内玩不了?腾讯AR专家教你自己做!
- Categorical, Ordinal, Interval - 变量之间的区别
- Google 推出全新的两步验证机制
- Google Guava中Preconditions的用法,让前置条件判断变得更优雅
- A Neural Algorithm of Artistic Style
- 使用Google开源tesseract OCR用语言库报allow_blob_division解决方案
- 使用了google zxing作为二维码生成工具
- AWS-GO-SDK NOTES
- Golang 通关初级(2)
- HDU1847 Good Luck in CET-4 Everybody!
- 【Google Protobuf】windows下protobuf的环境搭建(一)
- Django深入模板引擎