Django框架基础知识05-自定义模板标签与过滤器

根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则
目前最最重要的就是HOW
一 文件路径配置:
templates
存放自定义
某个app特有的自定义标签:存放模板的目录:在app目录下创建一个python package,在其中新建templatetags标签及过滤器的目录
目录结构:

注意:templatetags这个目录名字是固定的,而里面的模块名是自定义的.
模板过滤器的分析:
{{ var|foo:"bar" }} 变量,过滤器,参数
自定义过滤器就是一个带有一个或两个参数的Python 函数:
- (输入的)变量的值 —— 不一定是字符串形式。
- 参数的值 —— 可以有一个初始值,或者完全不要这个参数。
自定义过滤器的例子:

def to_male(value,arg): #自定义返回判断函数,用字典实现的例子
map = {
'zh':('女','男'),
'en':('female','male')
}
return map[arg][value]
掌握自定义的规则!!!
注册自定义过滤器:
django.template.Library.filter()
1.Library.filter()方法需要两个参数:
a. name:过滤器的名称(一个字符串对象)
b. filter_func:编译的函数 – 一个Python函数(不要把函数名写成字符串)
2.可以把register.filter()用作装饰器;在register.filter(name=''),可以放参数.
3.没有声明 name 参数,Django将使用函数名作为过滤器的名字。

使用自定义过滤器:
在模板中使用自定义的过滤器
需要使用{% load %}标签将我们的自定义模块加载进来
{% load %} 声明将会载入给定模块名中的标签/过滤器

自定义标签:
简单标签django.template.Library.simple_tag()
包含标签django.template.Library.inclusion_tag()
tag()方法有两个参数:
模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。
编译的函数 – 一个Python函数(不要把函数名写成字符串)
与过滤器注册一样,也可以将其用作装饰器。
自定义简单标签的例子:

代码布局(自定义的代码,放在哪里)

-app目录下,templatetags文件夹.

在simple_tags的参数中设置takes_context=True,就能得到views中的context传参.在自定义标签中的参数第一个一定要写context.例:
def func(context,format_str):
...
包含标签,通过渲染另外一个模板
自定义包含标签的例子:



例子:
@register.inclusion_tag('teacher/show_li_as_ul.html')
def show_list_as_ul(value,style):
return {'ls':value,'style':style}
<td>{% show_list_as_ul stu.course 'link' %}</td>
装饰器中传入的是我们显示数据的模板文件路径
context中以下划线开头的健,属性,方法用点号在模板中拿不到
例:arg = {
'_meta' = 'adafdakfl'
}
{{arg._meta}}取不到
想要取值就先把arg传到变量中,在变量里取出_meta,再用这个新变量取值.
函数返回的是个字典对象.
代码布局(自定义的代码,放在哪里)
某个app特有的 -app 目录下,templatetags 文件夹 -再到 templatetags 文件夹下创建python模块(py文件)
定义复用 -创建一个新的app,将他们定义在新的app中,在INSTALL_APPS 注册,然后就可以应用
1.自定义模板过滤器 -模板过滤器是什么 -函数,一个或两个参数 - 第一个参数,是传递进来的模板变量 - 第二个参数,普通的参数,也可以是默认,也可以不要 其实就是个函数,没有什么不同 - 定义非常简单,就是写一个函数
-注册
1.
通过django.template.Library 它的实例的 filter 方法
filter 有两个参数:
- name 过滤器的名称,是个字符串,可以不写,默认
使用方法名作为过滤器的名称
- filter_func 定义的过滤器的函数
2.通过装饰器
-模板中使用
- 先要load一下,通过python模块名
2.自定义模板标签 - 简单标签 django.template.Library.simple_tag() - 创建 普通的python函数 - 注册 1. 2.装饰器 - 引用上下文变量(views中render传递到模板中的那个context) 只需要在simple_tag 中,设置参数take_context=True 自定义的标签函数的第一个参数一定是 context
- 包含标签
Django框架基础知识05-自定义模板标签与过滤器的更多相关文章
- Django框架基础知识04-模板标签与模板继承
1.常用的模板标签 -作用是什么? -常用标签 总结:语法 {% tag %} {% endtag %} {% tag 参数 参数 %} 2.模板的继承与引用 -引用 include标签 -继承 ex ...
- Django框架基础知识03-模板变量及模板过滤器
模板变量及模板过滤器. 1.模板路径的查找 -查找顺序 1.尝试,在app目录下存放模板. -两种方案 1.app项目文件夹下存放. 2.templates文件夹下分类存放. 首先查找项目settin ...
- Django框架基础知识08-表关联对象及多表查询
1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...
- Django框架基础知识01-配置环境
Django框架 Django是个怎样的东西呢? Web应用框架----Django http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...
- Django框架基础知识02-路由及渲染
1.URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL ...
- 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)
自定义标签同自定义过渡器一样,要创建文件,在配置文件中以APP方法注册,对方法进注册,在 html 文件中引入,.. 由模板传参 在 在配置文件中改时区: 由视图函数传参 包含标签: 当有这种重复的代 ...
- Django框架基础知识13-auth系统
我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...
- Django框架基础知识12-中间件及上下文处理器
Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...
- Django框架基础知识11-会话状态保持及表单
浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢??? 状态保持----cookie和session: 状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不 ...
随机推荐
- 严格次小生成树(lca + 倍增)
题目描述 小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得 ...
- PHP gd 库添加 freetype
gd 库未安装 freetype 可能导致验证码图片加载不出来等问题. 先到 PHP 的扩展目录里面找到 gd 扩展文件夹 最好先 make clean 清除之前编译的可执行文件及配置文件,运行/us ...
- UWP 动画
一:StoryBoard 一般翻译成演示图版或者故事板,就像电影中的情节串联板,它是一个动画时间线的容器. 二:动画的分类 简单动画:以Animation结尾,例如DoubleAnimat ...
- [POI2005]Sza-Template
Description Byteasar 想在墙上涂一段很长的字符,他为了做这件事从字符的前面一段中截取了一段作为模版. 然后将模版重复喷涂到相应的位置后就得到了他想要的字符序列.一个字符可以被喷涂很 ...
- 洛谷 P2759 奇怪的函数
https://www.luogu.org/problemnew/show/P2759 #include<cstdio> #include<algorithm> #includ ...
- 当不知道基本数据类型的取值范围时,可以通过max_value等来查询
public class Demo03{ public static void main(String[] args){ System.out.println("int MAX " ...
- 138 Copy List with Random Pointer 复制带随机指针的链表
给出一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点.返回一个深拷贝的链表. 详见:https://leetcode.com/problems/copy-list- ...
- php数组与字符串转换
1.将字符串转换成数组的几个函数: (1)explode(separate,string) 示例:$str = "Hello world It's a beautiful day" ...
- ping localhost 返回 ::1的导致不能打开http://localhost的原因及解决
虽然可以在浏览器中正常访问http://localhost但用file,file_get_contents等函数打开http://localhost异常.用127.0.0.1也可以打开,本地hosts ...
- 外文翻译 《How we decide》多巴胺的预言 第三节
这是第二章的最后一节. 书的导言 本章第一节 本章第二节 本节阅读感言:自我批评是自我提升的妙方. 多巴胺是我们感情的源泉.多巴胺相关的神经系统在不断的记录着我们主观意识没有注意到的一个个模式,将它们 ...