zoukankan      html  css  js  c++  java
  • django基础篇04-自定义simple_tag和fitler

    自定义simple_tag

    • app目录下创建templatetags目录
    • templatetags目录下创建xxpp.py
    • 创建template对象register,注意变量名必须为register
    • @register.simple_tag
      def func(arg1,arg2):
          pass
    • settings.py文件中注册app,INSTALLED_APPS = ['app']
    • 模版文件顶部{% load xxoo %}
    • {{ 函数名 参数一 参数二}}

    django如何传递参数给template对象的?

    没错,就是通过views.py的函数传递,例如 render(request,'xxx.html',{'xx':'oo'}),还有其他的方式吗?其实还有url的方式传递参数,这里不再赘述

    今天,我们讲解一下template对象,如何与py进行交互,这里的py是指单独的py文件,而不是基于django的py文件

    下面看一段简单的代码

    首先,我们在app01文件夹下创建一个templatetags目录,然后在创建xxoo.py

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.simple_tag
    def simple_01():
        return 'Python'
    xxoo.py

     然后模板文件index.html

    {% load xxoo %}
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        <div>
            {% simple_01 %}
        </div>
    </body>
    </html>
    index.html

    注意:自定义simple_tag的4个注意事项

      1、在模版文件中 {% load py文件 %}

      2、settings.py文件中,注册app,本文自创建app01,所以在INSTALLED_APPS = ['app01']

      3、在app01目录下创建目录templatetags,注意必须在app01目录下

      4、创建template对象时,变量名固定,必须register,必须为register,必须为register

      5、必须重启服务

    接下来神奇的事情发生了

    进阶

    在之前基础上,我们加上参数

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.simple_tag
    def simple_02(a,b):
        return a + b
    xxoo.py
    {% load xxoo %}
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            {% simple_02 1 2 %}
        </div>
    </body>
    </html>
    index.html

    自定义filter

    • app目录下创建templatetags目录
    • templatetags目录下创建xxoo.py文件
    • 创建template的register对象,注意变量名必须为register
    • @register.filter
      def func(arg1,arg2):
          pass
    • settings.py中注册app,INSTALLED_APPS = ['app']
    • 模版文件顶部{% load xxoo %}
    • {{ 参数一|函数名:'参数二,参数三'}}  {{ 参数一|函数名:参数二 }},注意:函数名和参数二之间不能有空格
    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.filter
    def simple_03(a,b):
        return a +'-'+ b
    xxoo.py
    {% load xxoo %}
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            {{ '张杰'|simple_03:'谢娜' }}
        </div>
    </body>
    </html>
    index.html

    自定义simple_tag和filter的优缺点

    simple_tag

    优点:可以传多个参数

    缺点:不能作为if语句的条件

    filter

    优点:可以作为if语句的条件

    缺点:参数最多只能传2个,而且不能有空格,其他的只能通过字符串拼接,然后在分割

  • 相关阅读:
    3.默认参数的注意事项
    2.关键字global,nonlocal
    1.函数的结构,调用,传参,形参,实参,args,kwargs,名称空间,高阶函数
    19. 实现一个整数加法计算器(多个数相加):
    20.文件操作
    18.使用for循环计算+1-3+5-7+9-11+13...99的结果
    ubuntu docker更新镜像源
    虚拟环境的使用
    前端基础之HTML
    jQuery基本使用
  • 原文地址:https://www.cnblogs.com/it-q/p/9396271.html
Copyright © 2011-2022 走看看