Django中利用filter与simple_tag为前端自定义函数的实现方法
转自:http://www.jb51.net/article/116303.htm
前言
Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些的函数功能并不支持,例如通过模板来判断一个返回值是否是合法的数字类型,此时如果又不希望通过后台视图代码来实现的话,我们就可以自定义一些前端函数功能。
Django为我们提供了两种方式,分别是filter和simple_tag,下面对比两种方式,分别实现判断返回值的功能函数。
准备工作
1、应用程序必须要注册到settings配置文件中
2、在应用目录下创建templatetags目录
3、在templatetags创建模块文件,并导入Django内部方法
filter
在templatetags目录下创建python模块,这里命名为app01_func.py,内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from django import templatefrom django.template.defaultfilters import stringfilterregister = template.Library()@register.filterdef value_verification(value): # value为前端传递的参数 try: int(value) return True except: return False |
定制完后台功能后,就可以在模板文件中调用函数功能,首选需要在模板文件头中引入后台python模块。
|
1
|
{% load app01_func %} |
例如我们需要判断后台返回值load是否为一个有效数字时,可以做如下调用:
|
1
2
3
4
5
|
{% if load|value_verification %} {{ load }} is a valid int number.{% else %} {{ load }} is letter.{% endif %} |
simple_tag
simple_tag的代码方式与filter一样,不同的是在装饰器部分需要调用simple_tag方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from django import templatefrom django.template.defaultfilters import stringfilterregister = template.Library()@register.simple # 这里修改为simple_tagdef value_verification(value): # value为前端传递的参数 try: int(value) return True except: return False |
同时前端的调用方式也需要改为
|
1
|
{% value_verification load %} |
传递参数
- filter 最多支持两个参数传递
- simple 支持多个参数传递
filter中可以通过下面的方式实现参数传递
|
1
|
{{ load | value_verification:"100"}} |
这里即向后端传递了两个参数,一个是load,另一个是100,后端也要为函数指定好形参:
|
1
2
|
def value_verification(value, custom): # 配置好形参 ... |
simple_tag中可以指定多个形参,前台的调用方式如下:
|
1
|
{% value_verification load 100 200 ... %} |
这里filter中最多只能接受两个参数,但此时参数又多,又不想使用simple_tag的情况下,可以将多个参数用特定字符拼接成一个字符串传递给后端,后端通过split方式同样能获取多个参数。
对比总结
通过simple_tag和filter可以完成模板引擎无法完成的某些事情,filter将我们指定的函数变成了返回值可执行的方法,simple_tag将函数功能变为标签功能,例如if、ifequal等,同样调用方式也不同,对比如下:
|
1
2
|
{{ load | value_verification }} # filter{% value_verification load %} # simple_tag |
因为调用方式的不同,如果返回值需要做为if或ifequal判断依据的话,这里只能使用filter方法了,stringfilter方法可以实现将接收到的所有参数变为字符串类型,同register装饰器一样引用到函数方法上即可,这里注意要放在register下面,否则无法生效。
Django中利用filter与simple_tag为前端自定义函数的实现方法的更多相关文章
- Django中通过filter和simple_tag为前端实现自定义函数
Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些 ...
- js中使用function定义类、实例化,函数的调用方法
function Test002(name, age){ name, age, this.printInfo = function(){ //定义的公有方法 console.log(name, age ...
- Django中利用type动态操作数据库表
场景分析: 后台MySql数据库保存了一大批按股票代码命名的数据表,每张表保存的是每只股票的日线数据. stock_000002 stock_600030 stock_600020 ...一共3000 ...
- Django前端获取后端数据之前端自定义函数
在写网站的时候遇到了一个问题: Django在后端向前端传数据时,多数会使用dict字典来传送多个数据,但前端只能遍历,没有一个用key取到value值的方法可以直接使用 如果作为一个list传递到前 ...
- django中两张表有外键关系的相互查找方法,自定义json编码方法
两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列,该如何 ...
- PHP中call user func()和call_user_func_array()调用自定义函数小结
call_user_func() 和 call_user_func_array(),通过传入字符串函数,可以调用自定义函数,并且支持引用,都允许用户调用自定义函数并传入一定的参数: 1.mixed c ...
- django中的filter和get的区别 (MultipleObjectsReturned: get() returned more than one Publisher --)(DoesNotExist: Publisher matching query does not exist.)
上面的例子中`` filter()`` 函数返回一个记录集,这个记录集是一个列表. 相对列表来说,有些时候我们更需要获取单个的对象, `` get()`` 方法就是在此时使用的: >>&g ...
- django中的filter详解
filter (数据过滤) 我们很少会一次性从数据库中取出所有的数据:通常都只针对一部分数据进行操作. 在Django API中,我们可以使用`` filter()`` 方法对数据进行过滤: > ...
- django中的filter(), all(), get()
1. 类名.objects中的get(), filter(), all() 的区别 结论: (1)all()返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使 ...
随机推荐
- CreateThreadpoolIo 函数小记
函数原型如下: PTP_IO WINAPI CreateThreadpoolIo( _In_ HANDLE fl, _In_ PTP_WIN32_IO_CALLBACK pfnio, _Inout_o ...
- Scala单例对象和伴生对象
1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...
- Qt生成ui文件对应的.h和.cpp文件
在VS中,可以通过CMake设定QT5_WRAP_UI来编译a.ui到ui_a.h, 要想快速生成a.h和a.cpp,经过尝试,必须使用Qt Creator,否则就手写.
- C++ template —— 类型区分(十一)
前面的博文介绍了模板的基础,深入模板特性,模板和设计的一些内容.从这篇开始,我们介绍一些高级模板设计,开发某些相对较小.并且互相独立的功能,而且对于这些简单功能而言,模板是最好的实现方法:(1)一个用 ...
- linux个性化定制登录信息
1./etc/motd /etc/motd即messageoftoday(布告栏信息),每次用户登录时,/etc/motd文件的内容会显示在用户的终端.系统管理员可以在文件中编辑系统活动消息,例如:管 ...
- sqlserver添加查询 表、字段注释(转)
环境:xp sp3,sql server2008 .sqlserver用语句给表注释 EXECUTE sp_addextendedproperty N'MS_Description', N'表注释', ...
- c++ map使用问题【运行结果不一样】
map经常把指针作为key,这种情况下. 我们经常会很自然的以为,如果要取元素时,会按照我们存的顺序拿到元素. 但是事实上不是这样的,因为map取得时候是按key的大小排序的,而如果用指针作为key, ...
- 浏览器 User Agent字符串列表
http://www.73207.com/useragent/ http://www.73207.com/useragent/pages/internet-2520explorer/index.htm ...
- Python GUI编程之WxPython
https://en.wikipedia.org/wiki/WxPython 官网: Overview of wxPython: https://wxpython.org/pages/overview ...
- mac下编译 boost编译工具b2
cd boost_1_64_0/tools/build ./bootstrap.sh --with-toolset=gcc 输出: -n Bootstrapping the build engine ...