详解在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装饰器 免去调用父类构造函数的麻烦
May 18 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python3中的json模块使用详解
May 05 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
关于python多重赋值的小问题
Apr 17 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
Django重设Admin密码过程解析
Feb 10 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 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中接口与抽象类的区别
2013/06/08 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php写app用的框架整理
2019/09/29 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
js 文件引入实现代码
2010/04/23 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Django数据统计功能count()的使用
2020/11/30 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
中医专业职业生涯规划书范文
2014/01/04 职场文书
收入证明申请书
2015/06/12 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
基于python实现银行管理系统
2021/04/20 Python
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js