简单介绍Python的Django框架加载模版的方式


Posted in Python onJuly 20, 2015

一般说来,你会把模板以文件的方式存储在文件系统中,但是你也可以使用自定义的 template loaders 从其他来源加载模板。

Django有两种方法加载模板

  1.     django.template.loader.get_template(template_name) : get_template 根据给定的模板名称返回一个已编译的模板(一个 Template 对象)。 如果模板不存在,就触发 TemplateDoesNotExist 的异常。
  2.     django.template.loader.select_template(template_name_list) : select_template 很像 get_template ,不过它是以模板名称的列表作为参数的。 它会返回列表中存在的第一个模板。 如果模板都不存在,将会触发TemplateDoesNotExist异常。

默认情况下这些函数使用 TEMPLATE_DIRS 的设置来载入模板。 但是,在内部这些函数可以指定一个模板加载器来完成这些繁重的任务。

一些加载器默认被禁用,但是你可以通过编辑 TEMPLATE_LOADERS 设置来激活它们。 TEMPLATE_LOADERS 应当是一个字符串的元组,其中每个字符串都表示一个模板加载器。 这些模板加载器随Django一起发布。

    django.template.loaders.filesystem.load_template_source : 这个加载器根据 TEMPLATE_DIRS 的设置从文件系统加载模板。它默认是可用的。

    django.template.loaders.app_directories.load_template_source : 这个加 载器从文件系统上的Django应用中加载模板。 对 INSTALLED_APPS 中的每个应用,这个加载器会查找templates 子目录。 如果这个目录存在,Django就在那里寻找模板。

    这意味着你可以把模板和你的应用一起保存,从而使得Django应用更容易和默认模板一起发布。 例如,如果 INSTALLED_APPS 包含 ('myproject.polls','myproject.music') ,那么 get_template('foo.html') 会按这个顺序查找模板:

/path/to/myproject/polls/templates/foo.html

    /path/to/myproject/music/templates/foo.html

    请注意加载器在首次被导入的时候会执行一个优化: 它会缓存一个列表,这个列表包含了 INSTALLED_APPS 中带有 templates 子目录的包。

    这个加载器默认启用。

    django.template.loaders.eggs.load_template_source : 这个加载器类似 app_directories ,只不过它从Python eggs而不是文件系统中加载模板。 这个加载器默认被禁用;如果你使用eggs来发布你的应用,那么你就需要启用它。 Python eggs可以将Python代码压缩到一个文件中。

Django按照 TEMPLATE_LOADERS 设置中的顺序使用模板加载器。 它逐个使用每个加载器直至找到一个匹配的模板。

Python 相关文章推荐
python格式化字符串实例总结
Sep 28 Python
python3+PyQt5自定义视图详解
Apr 24 Python
如何使用python进行pdf文件分割
Nov 11 Python
python numpy 反转 reverse示例
Dec 04 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
Jan 03 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
Python json转字典字符方法实例解析
Apr 13 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
python字典key不能是可以是啥类型
Aug 04 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
在Django框架中编写Context处理器的方法
Jul 20 #Python
详解Django框架中用context来解析模板的方法
Jul 20 #Python
Django中URLconf和include()的协同工作方法
Jul 20 #Python
在Python的Django框架中包装视图函数
Jul 20 #Python
Django中URL视图函数的一些高级概念介绍
Jul 20 #Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 #Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 #Python
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
Python常见工厂函数用法示例
2018/03/21 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
python按照多个条件排序的方法
2019/02/08 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
财务工作个人求职的自我评价
2013/12/19 职场文书
股东出资证明书范例
2014/10/04 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python