【问题标题】:Golang pongo2 filter returns incorrect valueGolang pongo2 过滤器返回不正确的值
【发布时间】:2023-03-17 07:44:01
【问题描述】:

我创建了一个pongo2 过滤器,它应该返回传递给过滤器的参数的Absolute 值。但是,如果我将值作为参数传递,过滤器只会返回正确的答案。但是如果我直接传递值,它会返回不正确的值。

我的问题是,如果我直接传递值而不是作为参数传递,为什么它不会返回正确的结果?

package main

import (
    "fmt"
    "math"
        "github.com/flosch/pongo2"
    "log"
)

func init() {
    pongo2.RegisterFilter("abs", func(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
        if in.IsString() {
            return pongo2.AsValue(math.Abs(in.Float())), nil
        }
        return pongo2.AsValue(math.Abs(in.Float())), nil
    })
}

func correctWay() {
    tpl, err := pongo2.FromString("Hello {{ val|abs }}!")
        if err != nil {
            log.Fatal(err)
        }
    
        // Now you can render the template with the given
        // pongo2.Context how often you want to.
        out, err := tpl.Execute(pongo2.Context{"val": -5})
        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(out)
}

func incorrectWay() {
    tpl, err := pongo2.FromString("Hello {{ -5|abs }}!")
        if err != nil {
            log.Fatal(err)
        }
    
        // Now you can render the template with the given
        // pongo2.Context how often you want to.
        out, err := tpl.Execute(pongo2.Context{})
        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(out)
}


func main() {
    correctWay()
    incorrectWay()
}

【问题讨论】:

    标签: go templates pongo2


    【解决方案1】:

    我认为最简单的选择是将其作为字符串传递

    // This works:
    tpl, err := pongo2.FromString("Hello {{ '-5'|abs }}!")
    // prints Hello 5.000000!
    

    我做了一些实验,最初我认为是因为 Go 如何处理 templates 中的减号,但我认为不是这样。我不知道 pongo 在做什么,我很确定如果你传入 -5 只有 5 被传递给你注册的函数(将 fmt.Println(in.Float()) 添加到闭包中),然后当它被否定时由 Go 输出。这可能是一个错误?‍♂️。无论哪种方式,它都适用于字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2017-12-15
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多