详解在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创建一个最简单http webserver服务器的方法
May 08 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
Python 描述符(Descriptor)入门
Nov 20 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
python网络编程之五子棋游戏
May 14 Python
详解python中的异常和文件读写
Jan 03 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
python通过新建环境安装tfx的问题
May 20 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作的文本留言本的例子(三)
2006/10/09 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
jquery显示和隐藏div特效实例
2013/02/27 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
物业保安员岗位职责制度
2014/01/30 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
通知函格式范文
2015/04/27 职场文书
老人院义工活动感想
2015/08/07 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书