10

空白の制御に問題があり、まだhtml/templateテンプレートを読みやすい形式にフォーマットしています。私のテンプレートは次のようになります。

レイアウト.tmpl

{{define "layout"}}
<!DOCTYPE html>
<html>
        <head>
                <title>{{.title}}</title>
        </head>
        <body>
                {{ template "body" . }}
        </body>
</html>
{{end}}

body.tmpl

{{define "body"}}
{{ range .items }}
{{.count}} items are made of {{.material}}
{{end}}
{{end}}

コード

package main

import (
    "os"
    "text/template"
)

type View struct {
    layout string
    body   string
}

type Smap map[string]string

func (self View) Render(data map[string]interface{}) {
    layout := self.layout + ".tmpl"
    body   := self.body + ".tmpl"
    tmpl   := template.Must(template.New("layout").ParseFiles(layout, body))
    tmpl.ExecuteTemplate(os.Stdout, "layout", data)
}

func main() {
    view := View{ "layout", "body" }
    view.Render(map[string]interface{}{
        "title": "stock",
        "items": []Smap{
            Smap{
                "count":    "2",
                "material": "angora",
            },
            Smap{
                "count":    "3",
                "material": "wool",
            },
        },
    })
}

しかし、それは生成します (注: doctype の上に行があります):

<!DOCTYPE html>
<html>
    <head>
        <title>stock</title>
    </head>
    <body>


2 items are made of angora

3 items are made of wool


    </body>
</html>

私が欲しいのは:

<!DOCTYPE html>
<html>
    <head>
        <title>stock</title>
    </head>
    <body>
2 items are made of angora
3 items are made of wool
    </body>
</html>

他のテンプレート言語では、次のようなことが言えます

[[- value -]]

アクションの前後の空白は取り除かれますが、そのようなものはhtml/template. これは本当に、次のようにテンプレートを読み取れないようにする必要があるということですか?

レイアウト.tmpl

{{define "layout"}}<!DOCTYPE html>
<html>
    <head>
        <title>.title</title>
    </head>
    <body>
{{ template "body" . }} </body>
</html>
{{end}}

body.tmpl

{{define "body"}}{{ range .items }}{{.count}} items are made of {{.material}}
{{end}}{{end}}
4

3 に答える 3

15

You can use white space controller

{{range .foos -}} // eats trailing whitespace
    <tr><td>do something</td></tr>
{{- end}} // eats leading whitespace (\n from previous line)
于 2016-02-04T14:53:54.463 に答える
2

この場合、空白はユーザーのブラウザでレンダリングされた出力に違いをもたらさないため、それを制御することはおそらく美学を超えてほとんど意味がありません。

別の言い方をすれば、きれいにフォーマットされたテンプレート (私が好む) または部分的にきれいにフォーマットされた HTML (ネストされたインデントなし) を持つことができます。1 つを選択するか、既存のフォーマッターのいずれかを使用して HTML を後処理します。

于 2013-07-07T08:34:08.603 に答える
1

はい、空白と行は文字通りに翻訳されます。{{ define }} だけの行、または出力を生成しないその他の行がある場合は、解析されたファイルに空の行が含まれます。

理想的には、テンプレートを使用しているため、解析された出力を表示または編集する必要はありません。参考までに、JSP/JSF を使用して、見苦しい出力を確認してください。オンラインでほとんどのページのソースを表示します。それらも醜いです。

幸運を!

于 2013-07-07T05:53:05.057 に答える