go - Golang pongo2 过滤器返回不正确的值
问题描述
我创建了一个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()
}
解决方案
我认为最简单的选择是将其作为字符串传递。
// This works:
tpl, err := pongo2.FromString("Hello {{ '-5'|abs }}!")
// prints Hello 5.000000!
我做了一些实验,最初我认为这是因为 Go 如何处理模板中的减号,但我认为不是这样。我无法弄清楚 pongo 在做什么,我相当确定如果你-5
只5
传入 is 传递给你注册的函数(添加fmt.Println(in.Float())
到闭包),然后当它被 Go 输出时它被否定。这可能是一个错误♂️。无论哪种方式,它都适用于字符串。
推荐阅读
- linux - 如何在 Linux 上使用 LibvlcSharp?
- javascript - webview中的全屏视频问题
- android - 从 Android 模式派生加密密钥
- kivy - Kivy 如何在 GridLayout 中创建下拉列表
- c++ - 如何使用 QPushButton 以编程方式将 QGraphicsView 上的图像传递给 QTableView
- angular - Angular 6:如何间隔获取http
- excel - Excel - 使用公式的条件格式
- javascript - 如何让 Chrome 在新窗口中将 Base64 编码的图像保存为 png?
- python - 来自两个列表的元素的组合
- javascript - 如果 reCaptcha 成功,如何提交表单