Django下自定义标签和过滤器

Posted a2534786642

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django下自定义标签和过滤器相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

第一步:确保setting中的INSTALL_APPS配置当前的app,要不然Django无法找到自定义的simple_tag.

第二步:在app中创建templatetags模块(模块名只能是templatetags)

第三步:创建任意的.py文件  比如:my_tags.py

from django import template
from django.utils.safestring import mark_safe

register = template.Library()  #register的名字是固定的,不可改变

@register.filter
def filter_multi(v1,v2):  #过滤器只能接受两个参数,并且可以写在for循环和if条件判断里面
    return  v1 * v2 

@register.simple_tag  #和自定义filter类似,只不过接受更灵活的参数,没有个数限制

def simple_tag_multi(v1,v2,v3):
    return v1+v2+v3

  第四步:在使用自定义的simple_tag和filter文件中导入之前创建的my_tags.py    {% load my_tags %}

  第五步:如何使用simple_tag和filter(如何调用)

  

-------------------------------.html
{% load xxx %}  
      
# num=12
{{ num|filter_multi:2 }} #24
 
{{ num|filter_multi:"[22,333,4444]" }}
 
{% simple_tag_multi 2 5 %}  参数不限,但不能放在if for语句中
{% simple_tag_multi num 5 %}

  注意:filter可以用在if和for等语句后边,simple_tag不可以

{% if num|filter_multi:30 > 100%}
        {{ num|filter_multi:30 }}
{% endif %}

  inclusion_tag

  多用于返回html代码片段

  示例:

    templatetags/my_inclusion.py

from django import template

register = template.Library()


@register.inclusion_tag(‘result.html‘)  #将result.html里面的内容用下面函数的返回值渲染,然后作为一个组件一样,加载到使用这个函数的html文件里面
def show_results(n): #参数可以传多个进来
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}#这里可以穿多个值,和render的感觉是一样的{‘data1‘:data1,‘data2‘:data2....}

  result.html

<ul>
  {% for choice in data %}
    <li>{{ choice }}</li>
  {% endfor %}
</ul>

  index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>inclusion_tag test</title>
</head>
<body>

{% load inclusion_tag_test %}

{% show_results 10 %}  
</body>
</html>

  

 

 

 

 

 

 

 

 

 

 

  

---恢复内容结束---

以上是关于Django下自定义标签和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django—— 模板层:变量过滤器标签自定义标签和过滤器

django 第五课自定义模板过滤器与标签

Django(自定义过滤器和自定义标签)

Spring Boot环境下自定义shiro过滤器会过滤所有的url的问题

Django的templates(模板)

Django框架自定义标签和过滤器