python的Web框架,Django自定义过滤器及标签
代码布局
有的时候框架给的过滤器不够用,需要自定义一些过滤器,所以就需要我们自己来定义一些过滤器等
自定义代码放置的路径
某个app特用(独有)的 - app 目录下的 templatetags文件夹内(文件夹内需要有__init__.py文件)
公用的 - 再创建一个新的app,然后在新的app中创建templatetags(固定的单词写法)文件夹,但是需要在setting文件中的INSTALL_APPS中注册,然后就可以应用了
自定义模板过滤器
定义过滤器
在templatetags的文件夹下创建py文件(一般是叫customer_filters),过滤器写在文件内:
模板过滤器是一个函数,有一个或者两个参数
- 第一个参数,是传递进来的模板变量
- 第二个参数,是普通的参数,也可以是默认的,也可以不要
过滤器范式:
def func(value,arg='zh'):
map ={
'zh':('女','男'),
'en':('female','male')
}
return map[arg][value] 实现需要返回的值
注册
通过 django.template.Library 它的实例的filter 方法
filter 有两个参数:
- name:过滤器的名称,是个字符串,可以不写,默认使用方法名(函数名)作为过滤器的名称
- filter_func 定义的过滤器的函数 #导包
from django.template import Library #生成实例
register = Library()
第一种方法:
def func():
return '我是一个例子' #把函数丢进来。即注册成功,可以简写成register.filter(func)
register.filter('funcname',func)
#第一个参数表示调用的name,第二个参数表示函数名
第二种方法:通过装饰器方法来注册
#name这个参数可以不写,默认调用函数名
@register.filter(name=funcname)
def func()
return '我是一个例子'
模板中使用
- 第一步,需要先load一下,通过python模板名,在网页中load在templatetags文件夹下的这个过滤器函数的py文件 需要查看下settings.py文件中的INSTALLED_APPS 是否有注册,如没有就需要注册。
{% load customer_filters %}
自定义模板标签
- 简单标签: django.template.Library.simple_tag()
定义简单标签 simple_tag
在templatetags的文件夹下创建py文件(一般是叫customer_tags)
简单标签范式:显示当前时间的标签
from datetime import datetime #注册方法
from django.template import Library
register = Library() #当前时间的函数标签
def current_time(format):
return datetime.now().strftime(format)
注册的第一种方式:
#注册简单标签:第一种方式注册
register.simple_tag(current_time, name='current')
注册的第二种方式:
#注册简单标签:第二种方式注册,装饰器方式的写法,写在函数上即可
@register.simple_tag(name='current')
在html中使用
#load下templatetags的文件夹下创建的标签函数的py文件名
{% load customer_tags%}
#应用简单标签,名字和参数用空格隔开即可,后面是参数
{% current '%Y-%m-%d %H:%M:%S %}
引用上下文变量,此处简单标签的参数,也可以使用成views中render传递到模板中的context里面的数据。 需要在simple_tag中,设置参数take_context=True
标签函数的文件中,注册的时候添加takes_context参数
@register.simple_tag(name='current',takes_context=True) 在定义函数的时候,第一个参数必须且一定是context;
def current_time(context,format_str):
inclusion
包含标签 inclusion
-包含标签,通过渲染另外一个html模板来展示数据 django.template.Library.inclusion_tag()
需要创建一个html模板文件,可以创建在templates文件夹下的同级html文件中,也可以在其下面创建一个新的文件夹来存放html模板。
渲染的html模板
<ul>
<!--这里的ls对应的下面函数返回标签内的key-->
{% for i in ls %}
<li>{{ i }}</li>
{% endfor %}
</ul>
内容写在简单标签customer_tags的文件中
#注册方法
from django.template import Library
register = Library() #注册,并把需要渲染的模板丢进来,
@register.inclusion_tag('teacher/show_list_as_ul.html') def show_list_as_ur(value):
return {'ls':value}
在html中使用
#load在templatetags的文件夹下创建的标签函数的py文件名
{% load customer_tags%} #应用简单标签,名字和参数用空格隔开即可,后面是参数
{% show_list_as_ul stu.course %}
例子: 原本的课程展现方式

通过包含标签渲染后: 根据自定义的方式展现出来。

带参数的包含标签 inclusion:
标签函数
from django.template import Library
register = Library() @register.inclusion_tag('teacher/show_list_as_ul.html')
def show_list_as_ur(value, style):
return {'ls':value,'style':style}
html模板语法:
函数内的参数在此处的对应
{% if style == 'button' %}
<div class="list-gtoup">
{% for i in ls %}
<button type="button" class="list-group-item">{{ i }}<button>
{% endfor %
</div>
{% endif %} #还可以写上elif和else
{% endif %}
html中的用法
标签函数+空格+数据+空格+标签中的参数
<td>{% show_list_as_ul stu.course ''%}</td>
渲染之后的效果:

python的Web框架,Django自定义过滤器及标签的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- django自定义过滤器和标签
1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...
- Python 17 web框架&Django
本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则 rep.test('....') ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Python编程Web框架 :Django 从入门到精通
Django是一个高级别的Python Web框架,它鼓励快速开发和干净实用的设计. 现在我们开始学习它. Django学习之 第一章:Django介绍 Django学习之 第二章:Django快速上 ...
- Django自定义过滤器及标签
一.自定义过滤器 1.自定义过滤器文件存放位置 在APP应用下创建名为templatetags(该文件夹名固定)的文件包(包含__init__.py文件) 注意APP必须在setting中注册 即在s ...
- python的web框架---Django项目
Django项目之会议室预预订: 界面效果展示: 1.创建超级管理员,实现预定界面功能 2.预定界面: (一)基于pymysql设计数据表结构,理清前后端与用户交互逻辑.(用户表,会议室表,预定内容存 ...
- 在python的web框架Django中使用SQL Server
在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure 在后方网址中查 ...
随机推荐
- Python连接oracle数据库的基本操作
1,创建数据库连接connect和关闭数据库连接close 1.1 创建数据库连接的三种方式: 方法一:用户名.密码和监听分开写 import cx_Oracle db=cx_Oracle.conne ...
- PIO学习
边沿捕获 PIO可以对输入进行边沿捕获,它可以捕获上升沿.下降沿和双沿,当检测到边沿时PIO会把它存在edgecapture 寄存器之内: 打开Synchronously capture 时,会生成一 ...
- 【转载】 .NET框架设计—常被忽视的C#设计技巧
阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...
- robotframework 远程连接数据库问题
今天在使用RF远程连接数据库时出现报错的问题,因为我发现只安装databaselibrary跟PyMsql的话,连接本地的数据库是OK的,但是如果我们的测试机性能有限,那么既要编写代码.运行测试.还有 ...
- 对状压dp的一点理解
此dp可以理解为最暴力的dp,因为他需要遍历每个状态,所以将会出现2^n的情况数量,所以明显的标志就是数据不能太多(好像是<=15?),然后遍历所有状态的姿势就是用二进制来表示,01串,1表示 ...
- hdu 4069 垃圾数独
首先dfs给每个格子分一个大的区块 其次套板子就a 我一开始直接在选取行的时候填数独,发现超时 我这一行也就4个元素,找到 x <= 81 的列计算元素位置,81 < x <= 16 ...
- C++的用法心得
在报这个专业之前就听说C++很难,c++学习了俩个学期,感觉真的很难.自己学着学着就有点放弃了 ,课上没认真听 ,课下也没花时间,就这样浑浑噩噩的度过了大一上学期.后来班主任开班会说学计算机的一定要学 ...
- asp.net中的Filter类型其实是被当作单例的
Filter对请求进行过滤.例如,在进行身份验证的基础上增加一些权限判断,对于身份验证通过的用户,检测其是否有开通UserSpace,如果没有则在Response中说明.示例代码如下: public ...
- Linux 比较判断运算(if else)
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要是列举在shell命令中常出现的一些用来做比较的运算符,这些运算符是 ...
- 10分钟看懂Docker和K8S
本文来源:鲜枣课堂 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的 ...