回答編集履歴
2
回答例追記
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
次にその際のファイル名を「img/」をReadDirした結果に置き換えるだけなんですが、それはshow.htmlの内容が動的に変化するということになります。
|
5
5
|
動的なHTMLコンテンツを返すのにはどういう仕組みを使うのか考えてみてください。
|
6
6
|
|
7
|
-
追記
|
7
|
+
## 追記その1
|
8
8
|
|
9
9
|
そのshow.html例で表示されるようにするために、必要なハンドラが以下になります。
|
10
10
|
参考: [https://echo.labstack.com/guide/static-files/](https://echo.labstack.com/guide/static-files/)
|
@@ -20,4 +20,66 @@
|
|
20
20
|
<img src="/img/ファイル名">
|
21
21
|
<img src="/img/ファイル名">
|
22
22
|
...
|
23
|
+
```
|
24
|
+
|
25
|
+
## 追記その2
|
26
|
+
|
27
|
+
できれば上記の回答の段階を踏んだ方が自己解決力が向上するのですが、
|
28
|
+
だいぶ放置されているので回答例をあげておきます。
|
29
|
+
|
30
|
+
- echoインスタンスのRendererにRendererインターフェースを満たすものをあらかじめ入れておきます。
|
31
|
+
- (echo.Context).Render(...)にてRenderer.Render(...)を呼んだ結果を受け取れます。
|
32
|
+
- Renderにはテンプレート名と任意のオブジェクトが渡せます。
|
33
|
+
- テンプレートでは「{{.}}」にて上記の任意のオブジェクトを参照することができます。
|
34
|
+
- この場合、filesを渡したのでos.FileInfoのスライスが参照できます。
|
35
|
+
- 「{{range $v := .}}」にてfilesを1要素づつ取り出して「{{end}}」までの内容を繰り返します。
|
36
|
+
- 「{{$v.Name}}」という記述は(os.FileInfo).Name()にアクセスすることになります。
|
37
|
+
|
38
|
+
```go
|
39
|
+
import (
|
40
|
+
"github.com/labstack/echo/v4"
|
41
|
+
)
|
42
|
+
|
43
|
+
type Template struct {
|
44
|
+
templates *template.Template
|
45
|
+
}
|
46
|
+
|
47
|
+
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
|
48
|
+
log.Println(t.templates, name, data)
|
49
|
+
return t.templates.ExecuteTemplate(w, name, data)
|
50
|
+
}
|
51
|
+
|
52
|
+
func show(c echo.Context) error {
|
53
|
+
files, _ := ioutil.ReadDir("img")
|
54
|
+
return c.Render(http.StatusOK, "show.html", files)
|
55
|
+
}
|
56
|
+
```
|
57
|
+
|
58
|
+
```go
|
59
|
+
e := echo.New()
|
60
|
+
e.Renderer = &Template{
|
61
|
+
templates: template.Must(template.ParseGlob("templates/*.html")),
|
62
|
+
}
|
63
|
+
```
|
64
|
+
|
65
|
+
show.html
|
66
|
+
```html
|
67
|
+
<!DOCTYPE html>
|
68
|
+
<html>
|
69
|
+
<head>
|
70
|
+
<meta charset="utf-8" />
|
71
|
+
<title>画像をある分だけ表示する</title>
|
72
|
+
</head>
|
73
|
+
|
74
|
+
<body>
|
75
|
+
{{range $v := .}}
|
76
|
+
<div>
|
77
|
+
<label>{{$v.Name}}</label>
|
78
|
+
<div>
|
79
|
+
<img src="/img/{{$v.Name}}" width="20%" />
|
80
|
+
</div>
|
81
|
+
</div>
|
82
|
+
{{end}}
|
83
|
+
</body>
|
84
|
+
</html>
|
23
85
|
```
|
1
追記
answer
CHANGED
@@ -2,4 +2,22 @@
|
|
2
2
|
それを表示するページを提供するときにどのようにshow.htmlがどうなっていれば表示できるか考えてみてください。まずはそれを追記してみてください。
|
3
3
|
|
4
4
|
次にその際のファイル名を「img/」をReadDirした結果に置き換えるだけなんですが、それはshow.htmlの内容が動的に変化するということになります。
|
5
|
-
動的なHTMLコンテンツを返すのにはどういう仕組みを使うのか考えてみてください。
|
5
|
+
動的なHTMLコンテンツを返すのにはどういう仕組みを使うのか考えてみてください。
|
6
|
+
|
7
|
+
追記
|
8
|
+
|
9
|
+
そのshow.html例で表示されるようにするために、必要なハンドラが以下になります。
|
10
|
+
参考: [https://echo.labstack.com/guide/static-files/](https://echo.labstack.com/guide/static-files/)
|
11
|
+
```
|
12
|
+
e.Static("/img", "img")
|
13
|
+
```
|
14
|
+
|
15
|
+
これで`/show`の表示に「/img/sample.png」の画像表示はできましたでしょうか?
|
16
|
+
その後、show.htmlをテンプレートを使って以下のようなHTMLが出力されるように書けば良いわけです。
|
17
|
+
```html
|
18
|
+
<img src="/img/ファイル名">
|
19
|
+
<img src="/img/ファイル名">
|
20
|
+
<img src="/img/ファイル名">
|
21
|
+
<img src="/img/ファイル名">
|
22
|
+
...
|
23
|
+
```
|