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

时间:2022-01-15 13:10:57

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

根据一定规则,自己定义出符合需求功能的.用在任何你有需求的地方,因为内置的满足不了我们的需求,不同的东西有不同的定义规则

目前最最重要的就是HOW

一 文件路径配置:

templates

存放自定义

某个app特有的自定义标签:存放模板的目录:在app目录下创建一个python package,在其中新建templatetags标签及过滤器的目录

目录结构:

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

注意:templatetags这个目录名字是固定的,而里面的模块名是自定义的.

模板过滤器的分析:

{{ var|foo:"bar" }} 变量,过滤器,参数

自定义过滤器就是一个带有一个或两个参数的Python 函数:

- (输入的)变量的值 —— 不一定是字符串形式。

- 参数的值 —— 可以有一个初始值,或者完全不要这个参数。

自定义过滤器的例子:

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

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将使用函数名作为过滤器的名字。

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

使用自定义过滤器:

在模板中使用自定义的过滤器

需要使用{% load %}标签将我们的自定义模块加载进来

{% load %} 声明将会载入给定模块名中的标签/过滤器

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

自定义标签:

简单标签django.template.Library.simple_tag()

包含标签django.template.Library.inclusion_tag()

tag()方法有两个参数:

  1. 模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。

  2. 编译的函数 – 一个Python函数(不要把函数名写成字符串)

与过滤器注册一样,也可以将其用作装饰器。

自定义简单标签的例子:

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

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

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

-app目录下,templatetags文件夹.

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

在simple_tags的参数中设置takes_context=True,就能得到views中的context传参.在自定义标签中的参数第一个一定要写context.例:

def func(context,format_str):

...

包含标签,通过渲染另外一个模板

自定义包含标签的例子:

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

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

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

例子:

@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,再用这个新变量取值.

函数返回的是个字典对象.

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

  1. 某个app特有的 -app 目录下,templatetags 文件夹 -再到 templatetags 文件夹下创建python模块(py文件)

  2. 定义复用 -创建一个新的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

- 包含标签

​ ​