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下自定义标签和过滤器的主要内容,如果未能解决你的问题,请参考以下文章