详解在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之关于类的初步认识
Oct 11 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python生成随机数组的方法小结
Apr 15 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Django框架创建项目的方法入门教程
Nov 04 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
python 字典item与iteritems的区别详解
Apr 25 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 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初学者们头痛的十四个问题
2007/01/15 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
Python continue语句用法实例
2014/03/11 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python中文件操作简明介绍
2015/04/13 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
PyTorch的torch.cat用法
2020/06/28 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
毕业生自荐书
2013/12/18 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
家长建议怎么写
2014/05/15 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书