自定义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的更多相关文章

  1. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  2. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  3. Web框架django基础篇

    基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...

  4. python 之 Django 基础篇

    1,Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据 ...

  5. django基础篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  6. Java多线程系列--“基础篇”04之 synchronized关键字

    概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...

  7. Python学习-day19 django基础篇

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. 01:django基础篇

    Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...

  9. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

随机推荐

  1. (48)LINUX应用编程和网络编程之三Linux获取系统信息

    3.3.1.关于时间的概念 3.3.1.1.GMT时间 (1)GMT是格林尼治时间,也就是格林尼治地区的当地之间. (2)GMT时间的意义?[用格林尼治的当地时间作为全球国际时间],用以描述全球性的事 ...

  2. [design pattern](4) SImple Factory

    前言 本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是创建型模式的一员,也是我们平时coding用到的比较多的一个模式了. 思考题 首先,让我们思考以下的需求: 博主,突然很 ...

  3. CDH搭建和集成spark、kafka操作

    系统:Centos7 CDH版本:5.14.0 请自己提前安装好:mysql.jdk 并下载好相关依赖(每一台机器) yum -y install chkconfig python bind-util ...

  4. Jar包方式运行web项目

    使用Maven进行打包 在自己的电脑终端中进入到pom.xml文件的目录中执行maven打包.命令为: mvn clean package 1 成功的标志为​上面显示BUILD SUCCESS成功打包 ...

  5. [LeetCode]-010-Regular_Expression_Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  6. tp32-layuicms项目介绍

    项目结构:  项目截图: 登录页 文章列表 码云仓库:https://gitee.com/lim2018/tp32-layuicms

  7. 第十周java学习总结

    目录 第十周java学习总结 学习内容 代码上传截图 代码链接 第十周java学习总结 学习内容 第12章 Java多线程机制 主要内容 Java中的线程 Thread类与线程的创建 线程的常用方法 ...

  8. 打印GC日志

    所需参数如下: -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -verbose:gc -Xloggc:gc.log 会在根目录生成 gc.log 文件,里面记录 ...

  9. 项目测试完成后,总结典型性bug,以测试的角度,应该怎么筛选bug

    一个wap端改版项目完结了,总结下测试过程中的典型性bug:应该从哪个角度去总结? 有点疑问?不知道是以bug的影响度去总结,还是以优先级去总结(好像优先级和影响度是成正比的,优先级比较高的bug,影 ...

  10. 【Linux开发】将cmd中命令输出保存为TXT文本文件

    将cmd中命令输出保存为TXT文本文件 在网上看到一篇名为:"[转载]如何将cmd中命令输出保存为TXT文本文件" 例如:将Ping命令的加长包输出到D盘的ping.txt文本文件 ...