django基础篇04-自定义simple_tag和fitler
自定义simple_tag
- app目录下创建templatetags目录
- templatetags目录下创建xxpp.py
- 创建template对象register,注意变量名必须为register
- @register.simple_tag
def func(arg1,arg2):
pass - settings.py文件中注册app,INSTALLED_APPS = ['app']
- 模版文件顶部{% load xxoo %}
- {{ 函数名 参数一 参数二}}
django如何传递参数给template对象的?
没错,就是通过views.py的函数传递,例如 render(request,'xxx.html',{'xx':'oo'}),还有其他的方式吗?其实还有url的方式传递参数,这里不再赘述
今天,我们讲解一下template对象,如何与py进行交互,这里的py是指单独的py文件,而不是基于django的py文件
下面看一段简单的代码
首先,我们在app01文件夹下创建一个templatetags目录,然后在创建xxoo.py
from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag
def simple_01():
return 'Python'
xxoo.py
然后模板文件index.html
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <div>
{% simple_01 %}
</div>
</body>
</html>
index.html
注意:自定义simple_tag的4个注意事项
1、在模版文件中 {% load py文件 %}
2、settings.py文件中,注册app,本文自创建app01,所以在INSTALLED_APPS = ['app01']
3、在app01目录下创建目录templatetags,注意必须在app01目录下
4、创建template对象时,变量名固定,必须register,必须为register,必须为register
5、必须重启服务
接下来神奇的事情发生了
进阶
在之前基础上,我们加上参数
from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag
def simple_02(a,b):
return a + b
xxoo.py
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
{% simple_02 1 2 %}
</div>
</body>
</html>
index.html
自定义filter
- app目录下创建templatetags目录
- templatetags目录下创建xxoo.py文件
- 创建template的register对象,注意变量名必须为register
- @register.filter
def func(arg1,arg2):
pass - settings.py中注册app,INSTALLED_APPS = ['app']
- 模版文件顶部{% load xxoo %}
- {{ 参数一|函数名:'参数二,参数三'}} {{ 参数一|函数名:参数二 }},注意:函数名和参数二之间不能有空格
from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.filter
def simple_03(a,b):
return a +'-'+ b
xxoo.py
{% load xxoo %} <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
{{ '张杰'|simple_03:'谢娜' }}
</div>
</body>
</html>
index.html
自定义simple_tag和filter的优缺点
simple_tag
优点:可以传多个参数
缺点:不能作为if语句的条件
filter
优点:可以作为if语句的条件
缺点:参数最多只能传2个,而且不能有空格,其他的只能通过字符串拼接,然后在分割
django基础篇04-自定义simple_tag和fitler的更多相关文章
- 01: Django基础篇
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- iOS系列 基础篇 04 探究视图生命周期
iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
- python 之 Django 基础篇
1,Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据 ...
- django基础篇
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Python学习-day19 django基础篇
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- 01:django基础篇
Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
随机推荐
- idea启动或install时报错:There are test failures,如何跳过测试?
用idea install项目时失败,报这样的错: [INFO] BUILD FAILURE [INFO] --------------------------------------------- ...
- Spring Cloud Stream教程(一)介绍Spring Cloud Stream
Spring Cloud Stream是构建消息驱动的微服务应用程序的框架.Spring Cloud Stream基于Spring Boot建立独立的生产级Spring应用程序,并使用Spring I ...
- Spring Data Jpa (五)@Entity实例里面常用注解详解
详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...
- EMC存储同时分配空间到两台LINUX服务器路径不一致导致双机盘符大小不一致
操作系统:Centos linux6.6 当我们从EMC存储上划分空间同时分配给两台或者多台服务器上时,有的时候会出现在服务器上所生成的磁盘路径是不一致的,这样就会导致盘符名称不一致或者是盘符对应的大 ...
- onCreateViewHolder方法加载了子项的布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_w ...
- hihoCoder#1879 : Rikka with Triangles (计算几何)
n<=2000,肯定没有办法把所有三角形找出来全判一遍 对于三角形的三个角,分别计算贡献,锐角的贡献是1倍面积,钝角的贡献是-2倍面积,这样算出角的贡献之后除以3就可以了 每次选择一个点为中心点 ...
- 分布式任务队列 Celery —— 详解工作流
目录 目录 前文列表 前言 任务签名 signature 偏函数 回调函数 Celery 工作流 group 任务组 chain 任务链 chord 复合任务 chunks 任务块 mapstarma ...
- linux系统高级命令进阶
输出重定向 >:覆盖文件内容 echo "123" > test:把原来的内容覆盖 echo "123" >> test:把原来的存在( ...
- 链路聚合teaming(网卡绑定技术)2
一.sentos7网卡绑定技术之teaming 这里介绍两种最常见的双网卡绑定模式: (1) roundrobin - 轮询模式 所有链路处于负载均衡状态,这种模式的特点增加了带宽,同时支持容错能力. ...
- 无法识别的配置节log4net的(Unrecognized configuration section log4net)
每个配置文件中只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素. 问题: I ha ...