0

我可以使用动态属性制作 html 模板吗?

像这样例如当前导致错误

无效模板:模板:sticker.CellRepresentation:1:23:在 <.sticker_set.url> 处执行“sticker.CellRepresentation”:无法评估类型接口 {} 中的字段 url

func sample() error {
    tpl, err := template.New("sample").Parse(`<a href="${sticker_set.url}">{{.sticker_set.url}}</a>`)
    if err != nil {
        return err
    }

    data := map[string]interface{}{
        "sticker_set": map[string]interface{}{
            "url": "x",
        },
    }

    if err := tpl.Execute(NoopWriter{}, data); err != nil {
        return fmt.Errorf("Invalid template: %w", err)
    }

    return nil
}

func main() {
    err := sample()
    if err != nil {
        panic(err)
    }
}

我没有使用结构,因为我尝试执行的模板与在编译时未定义的结构的 json 一起使用

4

1 回答 1

1

你的例子对我和操场都很好。我稍微调整了模板并用作os.stdout作家。

func sample() error {
    tpl, err := template.New("sample").Parse(`<a href="{{.sticker_set.url}}">{{.sticker_set.url}}</a>`)
    if err != nil {
        return err
    }

    data := map[string]interface{}{
        "sticker_set": map[string]interface{}{
            "url": "xyz",
        },
    }

    if err := tpl.Execute(os.Stdout, data); err != nil {
        return fmt.Errorf("Invalid template: %w", err)
    }

    return nil
}

甚至尝试过使用不同的值类型:Playground

于 2021-01-24T10:36:45.363 回答