• 08 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>
    

      

      

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

  • 相关阅读:
    vue+element 通过checkbox控制el-table-column的显示或隐藏
    Vue 路由跳转相同路径页面不刷新
    Cookie的domain以及path详解
    Vue移动端项目如何使用手机预览调试
    vue SSR服务端渲染
    vue服务端渲染(ssr)与普通vue的区别,ssr的基本使用
    Vue SSR 插件Genesis
    br压缩算法
    Ant Design 自定义表单控件
    gorm出现incorrect datetime value '0000-0-0 00:00:00' for column问题
  • 原文地址:https://www.cnblogs.com/a2534786642/p/10492154.html
Copyright © 2020-2023  润新知