详解在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爬虫爬验证码实现功能详解
Apr 14 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
Python中对象的引用与复制代码示例
Dec 04 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
python3实现mysql导出excel的方法
Jul 31 Python
Django中的cookie和session
Aug 27 Python
django实现类似触发器的功能
Nov 15 Python
Python实现在Windows平台修改文件属性
Mar 05 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
239军机修复记
2021/03/02 无线电
php文件上传表单摘自drupal的代码
2011/02/15 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP在线书签系统分享
2016/01/04 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
js 异步处理进度条
2010/04/01 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
基于Python闭包及其作用域详解
2017/08/28 Python
python实现简单井字棋游戏
2020/03/04 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
学徒工职责
2014/03/06 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
环卫工作个人总结
2015/03/04 职场文书
运动与健康自我评价
2015/03/09 职场文书
创业计划书之农家乐
2019/10/09 职场文书
python中tkinter复选框使用操作
2021/11/11 Python