0

我正在尝试创建一个用于通过html/templateGo 包显示帖子的 html 模板。我还想在我的页面上进行分页,每页显示 5 个帖子。

所以我从我的帖子存储库中获取帖子计数,将其除以每页的帖子值并四舍五入(ceil)。这是当前可用帖子的总页数。

我将总页数传递给我的 html 模板。现在,在我的 html 模板中,我需要显示从 1 到 total number 的页面按钮。

text/html包中有一个关于如何使用管道的很棒的文档,但我没有找到任何创建简单循环的示例。

我得到了解决方案,但我不确定它是否是好的解决方案。我不仅可以将页面总数传递给模板,还可以传递可用页面的数组,因此在我的模板中我可以执行以下操作:

{{range .pages}}
    <div class="page"><a href="/posts/{{.}}">{{.}}</a></div>
{{end}}

但也许有比传递页面数组更好的方法来做到这一点?我也知道将自定义函数传递给模板的可能性。它可以成为一个解决方案吗?

4

2 回答 2

1

规则是模板必须包含尽可能少的逻辑(这就是本机功能和控件被限制在模板包中的原因)。

您应该通过将数据放入专用结构(要传递给模板)来将数据准备到控制器中。然后,您可以按照您的意图使用 range 函数将此结构(由变量和数组组成)显示到模板中。

于 2014-09-26T12:39:55.550 回答
1

试试这个,我已经尽力了...

package main

import "html/template"
import "os"

type data struct {
    Url   string
    Title string
}

type show struct {
    Pages []data
}

const html = `<html>
            {{range .Pages}}
                <div class="page"><a href="/posts/{{.Url}}">{{.Title}}</a>
</div>
        {{end}}
        </html>`

func show_template() {

    webpage, _ := template.New("template").Parse(html)

    mydata := []data{{
    Url:   "page-1.html",
    Title: "go to page 1",
}, {
    Url:   "page-2.html",
    Title: "go to page 2",
}, {
    Url:   "page-3.html",
    Title: "go to page 3",
}, {
    Url:   "page-3.html",
    Title: "go to page 3",
}}

web_data := show{mydata}

webpage.Execute(os.Stdout, web_data)

}

func main() {

    show_template()

}

这就是结果..

<html>

                    <div class="page"><a href="/posts/page-1.html">go to page 1</a></div>

                    <div class="page"><a href="/posts/page-2.html">go to page 2</a></div>

                    <div class="page"><a href="/posts/page-3.html">go to page 3</a></div>

                    <div class="page"><a href="/posts/page-3.html">go to page 3</a></div>

                    </html>
于 2017-05-21T10:12:37.507 回答