我一直在玩很多 go server 片段,试图弄清楚如何在 HTML 文件中显示图像文件或 go HTTP 模板以及 html 表单部分。基本上,如果我使用 go 模板,最大的问题是我无法将图像与 html 一起显示,并且仍然保持项目大小很小。似乎让模板工作的唯一方法是将代码组织成一个我试图避免的“典型的 go HTML 项目”。
有没有简单的方法(只有几个文件而不是创建“典型的 go web 项目文件结构”)在 go 模板中显示带有图像的 HTML?我相信下面的问题基本上与 http 处理程序有关。要么我可以有一个文本处理程序或图像处理程序,但不能两者兼而有之?我需要两者,这样我就可以从 HTML 表单中获得用户控制,将显示哪个图像。
如果有人可以提供帮助,我将不胜感激。
R乔
--已修改抱歉不清楚。我对 go 模板的经验有限,并且我看到过很多例子,人们使用 go app 项目文件结构,这些文件结构可能包括模板、img 等目录。这些目录通常有 10 个或更多。然后他们谈论在应用程序中使用路线以及我不敢涉足的其他事情。
我只是把我想做的事情看的更简单。我有大约 70 张图片。我只想要一种方式,用户可以单击显示图像的 html 页面,并根据显示的图像提供数字 1、2、3、4 作为反馈。
我想象一个单一的go程序(1个文件)可以接收数字,一旦收到就改变html页面上的img或允许用户单击下一个超链接或其他东西来显示下一个图像,一旦它结束程序停止.
package main
import (
"fmt"
"html/template"
"log"
"net/http"
//"strings"
func img(w http.ResponseWriter, r *http.Request) {
//http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("images/"))))
fmt.Println("method:", r.Method) //get request method
if r.Method == "GET" {
t, _ := template.ParseFiles("image.gtpl")
t.Execute(w, nil)
} else {
r.ParseForm()
// logic part of log in
fmt.Println("previmage:", r.Form["previmage"])
fmt.Println("nextimage:", r.Form["nextimage"])
}
}
func main() {
//http.HandleFunc("/", sayhelloName) // setting router rule
http.HandleFunc("/login", login)
err := http.ListenAndServe(":9090", nil) // setting listening port
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
<html>
<head>
<title></title>
</head>
<body> //How to Loop Images based on user submit??
<img src="img/question4.png" alt="Cannot load image" style="width: 800px;height: 800px">
<form action="/login" method="post">
Username:<input type="text" name="previmage">
Password:<input type="password" name="nextimage">
<input type="submit" value="Login">
</form>
</body>
</html>