Django框架自定义函数simple_tag和filter 自定制模板语言功能

鳄鱼君

发表文章数:531

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Django框架自定义函数simple_tag和filter 自定制模板语言功能

我们已经知道django会对模板页面进行渲染,我们可以在模板中添加django的语言,就像前面所讲的循环、导入,在这里还有下面的几种用法:

父模板:{% block title %}{% endblock %}
子模板:{% extends "children.html" %}
   {% block title %}{% endblock %}
其他方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ name|my_fiter:"e1yu" }}
{{ my_list|first|upper }}
{{ name | lower }}    {# name转换为小写 #}

那么我觉得这些用法太少了,我想自定义怎么办,django为我们提供了解决办法,就是自定义函数simple_tag,我们来看一些具体的做法。

首先在Django的APP目录下创建一个文件夹templatetags,名字固定尽量不要修改名字,接着就可以在templatetags文件夹下就可以创建任意的py文件,在py(tag.py)文件中我们可以写自定义函数:

from django import template
from django.utils.safestring import mark_safe
   
register = template.Library()  #创建一个template对象,名字为register,不可更改
   
@register.simple_tag
def my_simple(v1,v2):
    return  v1 + v2

我们可以对函数做修改,但是不要更改其他的地方,那么这样我们就定义好了自己的函数,接下来是如何使用?记得在settings.py中注册app,然后在需要使用的模板页面中添加下面的代码:

{% load tag %}  {# 添加在页面的顶部 文件名#}
{% my_simple 1 2 %}   {# 使用方法 函数名 参数 #}

这样就简单的实现了自定义的函数,django可以识别我们的函数,需要注意有些地方都是固定的名字,随意修改可能会报错。那么我们再来看一下上面的{{ name|my_fiter:"e1yu" }}这种该如何定义呢?我们只需要简单的修改一下啊装饰器的名字就可以了:

from django import template
from django.utils.safestring import mark_safe
   
register = template.Library()  #创建一个template对象,名字为register,不可更改
   
@register.filter
def my_filter(a1,a2):  
    return  a1+a2

{# 模板中的使用 函数只能接收两个参数 #}

{% load tag %}  {# 添加在页面的顶部 文件名#}
{{ "Next"|my_fiter:"E1yu" }}  {{ 参数1|函数名:"参数2" }}

自定义filter的用法比较严格,如果在模板中使用的时候多一个空格都会报错,函数也只能接收Next和E1yu两个参数,但是他可以作为if条件判断,而我们的simple_tag不能。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架自定义函数simple_tag和filter 自定制模板语言功能》 发布于2020-04-21

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

4 + 9 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册