django----过滤器和自定义标签
模板语法之过滤器
1、default:
如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
- <p>default过滤器:{{ li|default:"如果显示为空,设置的解释性的内容" }}</p>
2、length:返回值的长度。它对字符串和列表都起作用。例如:
- {{ value|length }} //如果 value 是 ['a', 'b', 'c', 'd'],那么输出是 4。
3、filesizeformat:
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB'
, '4.1 MB'
, '102 bytes'
, 等等)。例如:
- {{ value|filesizeformat }} //如果
value
是 123456789,输出将会是117.7 MB
。
4、date:如果 value=datetime.datetime.now()
- {{ value|date:"Y-m-d" }}
5、slice :切片
- {{ value|slice:"2:-1" }} //value="hello world"
6、truncatechars 截断
- <p>截断字符:{{ content|truncatechars:20 }}</p>
- <p>截断单词:{{ content|truncatewords:4 }}</p>
如果content是“I am is haiyan,how are you asd df dfgfdgdg?
输出结果: 截断字符:I am is haiyan,ho...
输出结果 :截断单词:I am is haiyan,how ...
7、safe
- value="<a href="">点击</a>"
- {{ value|safe}}
自定义标签和过滤器
1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
2、在app中创建templatetags模块(模块名只能是templatetags)
3、在templatetags里面创建任意 .py 文件
如:my_tags.py
- from django import template
- from django.utils.safestring import mark_safe
- register = template.Library() #register的名字是固定的,不可改变
- @register.filter 过滤器
- def multi(x,y):
- return x*y
- @register.simple_tag 标签
- def multitag(x,y,z):
- return x*y*z
- @register.simple_tag 标签
- def my_input(id,arg):
- result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
- return mark_safe(result)
- #自定义过滤器函数的参数只能两个,可以进行逻辑判断
- #自定义标签无参数限制,不能进行逻辑判断
4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py
- {% load my_tags %}
5、使用
- 对于自定义过滤器:
- @register.filter
- def filter_mult(x,y):
- return x+y
- {{ 20|filter_mult:3}} 不可以传多个参数,可以用于if 语句中
- =============================================
- 对于自定义标签:
- @register.simple.tag
- def render_app_name(class):
- return class.name
- {% render_app_name class %} 可以传多个参数,不可以用于if语句中
- 扩展:
- {% render_app_name class as app_name %} //可以用来循环处理这个返回这
- {% for name in apo_name%}
- pass
- {% endfor %}
补充:inclusion_tag的使用
- #!usr/bin/env python
- # -*- coding:utf-8 -*-
- from django.template import Library
- from django.urls import reverse
- from stark.service.v1 import site
- register = Library()
- @register.inclusion_tag("stark/form.html")
- def form(model_form_obj):
- from django.forms import ModelChoiceField
- from django.forms.boundfield import BoundField # 数据都封装在这个类了
- new_form = []
- for bfield in model_form_obj:
- dic = {"is_popup": False, "item": bfield} # 每一个bfield就是Form的字段,是一个对象
- if isinstance(bfield.field, ModelChoiceField):
- # print(bfield.field,"popup按钮")
- print(bfield, type(bfield)) # <class 'django.forms.boundfield.BoundField'>
- releated_model_name = bfield.field.queryset.model # 找到关联的类名
- app_model_name = releated_model_name._meta.app_label, releated_model_name._meta.model_name # 找到应用名和类名(目的是拼接url)
- base_url = reverse("stark:%s_%s_add" % (app_model_name))
- popup_url = "%s?_popupbackid=%s" % (base_url, bfield.auto_id) #每一个input框的id
- print(bfield.auto_id,"111111")
- dic["is_popup"] = True
- dic["popup_url"] = popup_url
- new_form.append(dic)
- return {"form":new_form} #返回的这个form是给了"stark/form.html"它里面的form,然后循环遍历
stark/form.html
使用
- <form method="post" class="form-horizontal" novalidate>
- {% csrf_token %}
- {% for dic in form %} #使用
- <div class="col-sm-6">
- <div class="form-group">
- <label for="inputEmail3" class="col-sm-2 control-label">{{ dic.item.label }}</label>
- <div class="col-sm-10" style="position: relative">
- {{ dic.item }}
- {% if dic.is_popup %}
- <div style="position: absolute;right: -5px;top: 8px;z-index: 9999">
- <a onclick="popUp('{{ dic.popup_url }}')" class="glyphicon glyphicon-plus"></a> <!--注意要加引号,不然就会被当成变量了-->
- </div>
- {# 判断如果是MOdelChoicesField是Fk#}
- {# 判断如果是MOdelChoicesField是Fk#}
- {% endif %}
- {{ dic.item.errors.0 }}
- </div>
- </div>
- </div>
- {% endfor %}
- <div class="col-sm-offset-11 col-sm-1">
- <input type="submit" class="btn btn-primary" value="提交">
- </div>
- </form>
- <script>
- function popupCallback(data) {
- var op = document.createElement("option");
- op.value = data.id;
- op.text = data.text;
- op.setAttribute("selected","selected");
- document.getElementById(data.popupbackid).appendChild(op)
- }
- function popUp(url) {
- var popupPage = window.open(url, url, "status=1, height:500, width:600, toolbar=0, resizeable=0");
- }
- </script>
django----过滤器和自定义标签的更多相关文章
- Django 05 自定义过滤器、自定义标签
Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...
- Django-【template】自定义过滤器和自定义标签
模板语言内置的过滤器和标签比较少,往往会遇到无法满足需求的情况,所以需要我们来自定义.自定义filter和simple_tag在项目中很常用 a.首先检查settings下面INSTALLED ...
- Django(自定义过滤器和自定义标签)
模版是一个用django模版语言标记过的python字符串.模版可以包含模版标签和变量. 模版标签是在一个模版里起作用的标记.比如,一个模版标签可以产生控制结构的内容(if或者for),可以获取数据库 ...
- django-DIL模板自定义过滤器,自定义标签,自定义包含标签
自定义过滤器 DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求.因此django提供了一个接口,让开发者能自定义标签和过滤器. 首先,你需要添加一个t ...
- 在django中使用自定义标签实现分页功能
效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...
- Django模版语言自定义标签-实现前端 关联组合过滤查询
前端关联 组合过滤查询 实现效果如图: models.py 创建表代码 from django.db import models # Create your models here. class Le ...
- Django的自定义标签
Django提供了自定义标签功能,可以方便常用方法的重复使用. 标签的本质就是函数,标签名就是函数名. 注意点: 1.需要到django.template对象. 2.register = templa ...
- day058 聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
1.聚合(aggregate) 聚合的主要语法: from django.db.models import Avg , Max , Min , Count models.类名 .objects.all ...
- day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
随机推荐
- C#面向对象设计的七大原则
本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1. 开闭原则(Open-Closed Principle, OCP) 定义:软件实 ...
- 2636652995 揭秘骗子qq
3042952272636652995755610392020068008这是个骗子群526875508,群里都是群主的小号,付钱之后不给东西,还在群里维护骗子的利益,很明显了.都是骗子小号了,付完整 ...
- 51Nod1376 (dp + BIT // cdq分治)
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 求LIS的数量. 乍一看觉得还是dp,仔细一看确实可以用dp做. ...
- Java Calendar使用总结
JavaCalendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/a ...
- HDU - 3002 King of Destruction(最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=3002 最小割模板 #include<iostream> #include<cmath> ...
- python安装办法
先我们来安装python 1.首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后,选择64位下载. 2.下载完成后如下图所示 ...
- pyqt5的安装
第一步:需要安装:pip3 install pyqt5 安装工具:pip3 install pyqt5-tools 第二步:打开Pycharm,进入设置,添加外部工具 file-->sett ...
- bootstrap-table前端修改数据
使用bootstrap-table显示数据,后台传回数据以后,可能需要对其做调整,如需要前端为数据添加单位 调整数据代码 $("#"+tableId).bootstrapTable ...
- SpringBoot整合国际化功能
(1).编写国际化配置文件 在resources下新建i18n文件夹,并新建以下文件 ①index.properties username=username ②index_en_US.proper ...
- 【逆向工具】IDA使用4-控制台逆向分析 Reverse004.exe 获取密码
工具 吾爱破解版本OD.IDA6.8 OD使用-动态分析 OD快捷方式 F2 下断点,也就是指定断点的地址F3加载一个可执行程序,进行调试分析F4程序执行到光标处 F5 缩小.还原当前窗口 F7 单步 ...