0

html テンプレートを動的プロパティで動作させることはできますか?

たとえば、このように現在エラーが発生しています

無効なテンプレート: template: 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
}

さまざまな値の型で試してみました:

于 2021-01-24T10:36:45.363 に答える