Задать вопрос
@blecked88

Как правильно вызвать метод в шаблоне Go?

Хочу сделать нечто такое:
{{ range .Posts.GetSublistByPagenumber .Number }}

По крайней мере по документации шаблонизатора метод должен вызываться так. Но он не вызывается. Вообще в тело метода код не заходит. При этом сервер не падает. Просто не рендерится все что после этой строки.

Метод такой:
func (posts Posts) GetSublistByPagenumber(pageNumber int) Posts {

	fmt.Println("I AM IN GetSublistByPagenumber")

	if pageNumber < 1 {
		return posts[0:MAX_POSTS_ON_PAGE]
	}

	startIndex := (pageNumber - 1) * MAX_POSTS_ON_PAGE
	endIndex := startIndex + MAX_POSTS_ON_PAGE

	if startIndex >= len(posts) {
		return []Post{}
	}
	if endIndex > len(posts) {
		endIndex = len(posts)
	}
	// Возвращаем подсписок постов

	return posts[startIndex:endIndex]
}


контекст страницы такой:
func GetPageContext(c *gin.Context, pageNumber int, posts Posts, data string) *Page {
	accessLvl := getAccessLvl(c)
	return &Page{
		AccessLvl: accessLvl,
		Title:     "title",
		Posts:     posts,
		Tags:      t,
		Number:    pageNumber,
		Data:      data,
	}
}


Тип Posts, для которого определен метод:

// Структура поста
type Post struct {
	ID          int
	Author      string
	Title       string
	Body        string
	PostingTime string
	UpdateTime  string
	Tags        string
	Lock        int
}

type Posts []Post


В мапу как я понимаю методы не надо добавлять. Ну они и просто не добавляются.
Ну на всякий случай, роутинг такой:
func SetupRoutes(r *gin.Engine) {
	funcMap := template.FuncMap{
		"add":                add,
		"GetFirstSymbols":    GetFirstSymbols,
		"SplitString":        SplitString,
		"DaysSinceStartSite": DaysSinceStartSite,
		"GetRegUsersCount":   GetRegUsersCount,
		"GetDbSize":          GetDbSize,
		"CountFilesByEXT":    CountFilesByEXT,
		"getCurTime":         getCurTime,
	}

	r.SetFuncMap(funcMap)
	r.LoadHTMLGlob("templates/*")
	InitRoutes(r)
}
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы