详解在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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
python中for语句简单遍历数据的方法
May 07 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
python使用zip将list转为json的方法
Dec 31 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python安装scipy的步骤解析
Sep 28 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
详解Vite的新体验
2021/02/22 Javascript
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
python3将变量输入的简单实例
2020/08/19 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
矫正人员思想汇报
2014/01/08 职场文书
渡河少年教学反思
2014/02/12 职场文书
秋季运动会广播稿
2014/02/22 职场文书
工作过失检讨书
2014/02/23 职场文书
生物学专业求职信
2014/07/23 职场文书
谢师宴家长致辞
2015/07/27 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
golang判断key是否在map中的代码
2021/04/24 Golang