根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则
目前最最重要的就是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
- 包含标签