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

Web server на go в шаблоне не отдает изображение. Что не так?

Есть простенький web server, который должен рендерить страницу по шаблону html
Его код
package main

import (
	"fmt"
	"net/http"
)

type msg string

func (m msg) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
	fmt.Fprint(resp, m)
}

func main() {
	fs := http.FileServer(http.Dir("static"))
	http.Handle("/", fs)
	http.HandleFunc("/index", func(w http.ResponseWriter, r *http.Request) {
		http.ServeFile(w, r, "static/template/index.html")
	})
	fmt.Println("Server is started")
	http.ListenAndServe("localhost:8081", nil)
}


Ну и собственно сам шаблончик
<!DOCTYPE html>
<head>
    <title>welcome</title>
    <script src="/js/bootstrap.min.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
</head>
<body>
    <div>
        <div class="row">
            <div class="col">1 of 4</div>
            <div class="col"><img src="/static/images/one.png" alt="img"></div>
        </div>
        <div class="row">
            <div class="col">3 of 4</div>
            <div class="col">4 of 4</div>
        </div>
    </div>
</body>
<footer>
    <p>this is the end</p>
</footer>


В отдельной папке static лежит файл типа .png
В браузере после запуска сервера вижу вот такое
GET localhost:8081/static/images/one.png 404 (Not Found)

При этом если я открываю шаблон из файловой системы то все отлично показывает.
Что я делаю не так?
  • Вопрос задан
  • 640 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@Red1zko Автор вопроса
Ошибка таилась в неправильном описании абсолютных путей до статических файлов.
Решение:
<!DOCTYPE html>
<head>
    <title>welcome</title>
    <script src="/js/bootstrap.min.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
</head>
<body>
    <div>
        <div class="row">
            <div class="col">1 of 4</div>
            <div class="col"><img src="/images/one.png" alt="img"></div>
        </div>
        <div class="row">
            <div class="col">3 of 4</div>
            <div class="col">4 of 4</div>
        </div>
    </div>
</body>
<footer>
    <p>this is the end</p>
</footer>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
hOtRush
@hOtRush
Просто предположу что путь к картинке относительный, относительно /index, т.е. вместо /static/images/one.png он пытается на /index/static/images/one.png и получает 404
Ответ написан
igorzakhar
@igorzakhar
...
<div class="col"><img src="/images/one.png" alt="img"></div>
...


5d78c5c77c57b092229910.png
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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