详解在Python的Django框架中创建模板库的方法


Posted in Python onJuly 20, 2015

不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构)。

创建一个模板库分两步走:

    第一,决定模板库应该放在哪个Django应用下。 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用。 我们更推荐使用后者,因为你的filter可能在后来的工程中有用。

    无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中。 我们稍后会解释这一点。

    第二,在适当的Django应用包里创建一个 templatetags 目录。 这个目录应当和 models.py 、 views.py 等处于同一层次。 例如:

books/
  __init__.py
  models.py
  templatetags/
  views.py

    在 templatetags 中创建两个空文件: 一个 __init__.py (告诉Python这是 一个包含了Python代码的包)和一个用来存放你自定义的标签/过滤器定义的文件。 第二个文件的名字稍后将用来加载标签。 例如,如果你的自定义标签/过滤器在一个叫作 poll_extras.py 的文件中,你需要在模板中写入如下内容:

{% load poll_extras %}

    {% load %} 标签检查 INSTALLED_APPS 中的设置,仅允许加载已安装的Django应用程序中的模板库。 这是一个安全特性;它可以让你在一台电脑上部署很多的模板库的代码,而又不用把它们暴露给每一个Django安装。

如果你写了一个不和任何特定模型/视图关联的模板库,那么得到一个仅包含 templatetags 包的Django应用程序包是完全正常的。 对于在 templatetags 包中放置多少个模块没有做任何的限制。 需要了解的是:{%load%}语句是通过指定的Python模块名而不是应用名来加载标签/过滤器的。

一旦创建了Python模块,你只需根据是要编写过滤器还是标签来相应的编写一些Python代码。

作为合法的标签库,模块需要包含一个名为register的模块级变量。这个变量是template.Library的实例,是所有注册标签和过滤器的数据结构。 所以,请在你的模块的顶部插入如下语句:

from django import template

register = template.Library()

注意

请阅读Django默认的过滤器和标签的源码,那里有大量的例子。 他们分别为: django/template/defaultfilters.py 和 django/template/defaulttags.py 。django.contrib中的某些应用程序也包含模板库。

创建 register 变量后,你就可以使用它来创建模板的过滤器和标签了。

Python 相关文章推荐
python使用matplotlib绘制柱状图教程
Feb 08 Python
Python中创建字典的几种方法总结(推荐)
Apr 27 Python
Python探索之pLSA实现代码
Oct 25 Python
Python使用gRPC传输协议教程
Oct 16 Python
Python操作json的方法实例分析
Dec 06 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
Pycharm小白级简单使用教程
Jan 08 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
python小白学习包管理器pip安装
Jun 09 Python
利用PyTorch实现VGG16教程
Jun 24 Python
Python eval函数介绍及用法
Nov 09 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 #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
You might like
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
php绘制一个扇形的方法
2015/01/24 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Sanic框架路由用法实例分析
2018/07/16 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
产品售后服务承诺书
2014/05/21 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
校友回访母校寄语
2015/02/26 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
2016党员党课心得体会
2016/01/07 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏