详解在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比较2个xml内容的方法
May 11 Python
常见python正则用法的简单实例
Jun 21 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Python如何实现FTP功能
May 28 Python
Python 连接 MySQL 的几种方法
Sep 09 Python
举例讲解Python装饰器
Dec 24 Python
Python中tqdm的使用和例子
Sep 23 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
Linux下编译redis和phpredis的方法
2016/04/07 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP加密技术的简单实现
2016/09/04 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
在Python中使用__slots__方法的详细教程
2015/04/28 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
python实现多进程代码示例
2018/10/31 Python
Python和Go语言的区别总结
2019/02/20 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python中字符串List按照长度排序
2019/07/01 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
百度JavaScript笔试题
2015/01/15 面试题
园林技术个人的自我评价
2014/02/15 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python