Golang分页

时间:2014-07-19 09:53:17

标签: templates pagination go

我需要实施分页。实际上我有pages数组,page param和per_page变量。 在我的代码中:

pages_count := math.Floor(float64(len(pages)) / float64(per_page))

然后在模板中我需要类似(伪代码)的东西:

{{ if .page - 2 > 0 }}
    {{ $start_page := .page - 2 }}
{{ else }}
    {{ $start_page := 1 }}
{{ end }}

{{ if .page + 2 >= .pages_count }}
    {{ $finish_page := .page + 2 }}
{{ else }}
    {{ $finish_page := .pages_count }}
{{ end }}

<ul>
    {{ for $i := $start_page; $i <= $finish_page; ++$i }}
        <li {{ if $i == .page }} class="current_page" {{ end }}>
            <a href="{{ url "Pages.Show" .$i }}">$i</a>
        </li>
    {{ end }}
</ul>

如何正确实现? THX

1 个答案:

答案 0 :(得分:2)

当我使用Java模板(例如Velocity)时,我发现你所询问的模板逻辑种类会导致过于复杂的模板。这同样适用于Go。

我的解决方案是将逻辑移入视图模型层并使模板保持相当愚蠢。这意味着控制器和视图模型必须进行更多的工作,预先计算模板显示的值类型。视图模型因此更大 - 但它只是简单的数据,并且易于单元测试。

在您的具体示例中,您将保留构建<li>列表的for循环。可以在视图模型中处理<ul>开放标记之上的所有内容。因此模板只能使用一些预先计算的数据。