首页 > 其他 > 详细

Django下自定义标签和过滤器

时间:2019-03-07 21:51:23      阅读:137      评论:0      收藏:0      [点我收藏+]

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

第一步:确保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下自定义标签和过滤器

原文:https://www.cnblogs.com/a2534786642/p/10492154.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!