Как написать код golang в html файле (фреймворк gin gonic)

Я новичок в коде голанга, а также в джингонике. У меня проблема при использовании джин-гоника.

В моем контроллере. Я получаю все статьи и визуализирую их в HTML-файл по коду.

c.HTML(http.StatusOK, "articles/list", gin.H{
    "title":    "Articles",
    "articles": articles,
})

и статьи имеют поле "CreatedOn" типа int64 (дата создания) Итак, в моем представлении list.html, как я могу разобрать CreateOn типа int64 в формате даты.

<div class="list-group">
  {{ range $article := $articles }}
    <a href="/articles/{{ $article.Id }}" class="list-group-item">
      <h4 class="list-group-item-heading">{{ $article.Title }}</h4>
      <p class="list-group-item-text">{{ $article.Body }}</p>
      <p class="list-group-item-text">{{ $article.CreatedOn  }}</p>
      <p class="list-group-item-text"></p>
    </a>
  {{ end }}
  </div>

Спасибо всем

Я нашел способ написать метод FormatDate ()

func (a *Article) FormatDate(ab int64) string {
    return "test Time"
}

в модели «Артикул». тогда, на мой взгляд, я звоню

  <p class="list-group-item-text">{{ .FormatDate article.CreatedOn  }}</p>

Что-нибудь еще????


person Vutuz    schedule 01.07.2016    source источник
comment
Разве ваш FormatDate() подход не работает?   -  person Nadh    schedule 01.07.2016
comment
конечно сработало. это метод, я хочу создать вспомогательную функцию для шаблона, но не знаю, как объявить и вызвать ее   -  person Vutuz    schedule 04.07.2016


Ответы (1)


TL; DR используйте SetHTMLTemplate

Изучив документацию Gin, вы сможете использовать собственный механизм создания шаблонов.

Вызывая r.SetHTMLTemplate (tmpl)

Сам Gin использует встроенный стандартный пакет html / template golang.

Вы можете использовать тот же механизм и добавить пользовательские функции.

Создайте функции, используя template.FuncMap:

funcMap := template.FuncMap{
    "formatTime": func(raw int64) string {
        t := time.Unix(raw, 0)

        return t.Format("Jan 2 15:04:05 2006")
    },
}

Создайте экземпляр шаблона:

tmpl := template.Must(template.New("main").Funcs(funcMap).ParseGlob("templates/**/*"))

Зарегистрируйте новый шаблон:

r := gin.Default()
r.SetHTMLTemplate(tmpl)

Если вы используете одно и то же имя шаблона для разных конечных точек, укажите имя:

{{ define "articles/list.tmpl"}}

<div class="list-group">
{{ range $article := .articles }}
  <a href="/articles/{{ $article.Id }}" class="list-group-item">
    <h4 class="list-group-item-heading">{{ $article.Title }}</h4>
    <p class="list-group-item-text">{{ formatTime $article.CreatedOn }}</p>
    <p class="list-group-item-text"></p>
  </a>
{{ end }}
</div>

{{ end }}

formatTime: определяется с помощью template.FuncMap

Для вызова используйте обычный способ:

c.HTML(http.StatusOK, "articles/list", gin.H{
    "title":    "Articles",
    "articles": articles,
}) 
person Eddy K    schedule 05.10.2016
comment
Можно ли это применить здесь к stackoverflow.com/questions/58204983/? Есть ли способ выполнить задачу? - person alessiosavi; 02.10.2019