Flask шаблон приложения не может найти файл, возвращается ошибка 404 - PullRequest
1 голос
/ 14 июля 2020

Это смущает. Я работаю над сайтом игры fla sh в flask, и все шло довольно хорошо, пока на самом деле не загрузилась игра fla sh на сайт. По какой-то причине игра не может найти файл .swf, выдает ошибку 404.

Это основное содержимое файла шаблона. Его местоположение - myproject / templates / game. html:

<h1>Game success! {{gamedictionary["name"]}}</h1>
<object width="{{gamedictionary['width']}}" height="{{gamedictionary['height']}}">
    <param name="movie" value="{{gamedictionary['game_file']}}">
    <embed src="{{gamedictionary['game_file']}}" width="{{gamedictionary['width']}}" height="{{gamedictionary['width']}}">
</object>

gamedictionary - словарь, переданный запросом, который содержит все данные игры, такие как имя, идентификатор, ширина и высота игры fla sh и, самое главное, это расположение файла. Для redball словарь выглядит так:

{
  "id": "redball1",
  "name": "Red Ball",
  "game_file": "../resources/game_files/redball1.swf",
  "icon_file": "../resources/icon_files/redball1.png",
  "desc": "Red Ball is a fun game!",
  "width": 786,
  "height": 571.63
}

Я не думаю, что здесь ошибка, но если это помогает, то это функция запроса app.py, которая возвращает игру. html template:

@app.route('/game/<string:gameid>')
def game(gameid):
    for gamedictionary in mother_data:
        if gamedictionary["id"] == gameid:
            print("Found match!")
            return render_template("game.html", gamedictionary=gamedictionary)
    else:
        return render_template("404.html")

(app.py находится в myproject / app.py)

for l oop проходит через mother_data, которая представляет собой массив всех словарей игровых данных , и если идентификатор словаря совпадает с URL-адресом запроса (это соответствующая игра), то он возвращает шаблон game. html и передает gamedictionary, который содержит все данные, как показано в приведенном выше фрагменте кода.

Вот где возникает проблема. Глядя на окончательный рендеринг html, все остальные игровые данные загружаются нормально. Название игры, ширина и высота фрейма sh, все работает. Проблема в том, что игра не может найти файл. Он возвращает эту ошибку в консоли.

:5000/resources/game_files/redball1.swf:1 Failed to load resource: the server responded with a status of 404 (NOT FOUND)

Что мне исправить, чтобы он нашел файл redball1.swf и загрузил игру? Пожалуйста, будьте осторожны, я давно не программировал на flask, и даже тогда я был только новичком. Если вам нужна дополнительная информация, я с радостью предоставлю ее и отвечу на любые вопросы по другим частям кода. Спасибо за помощь!

1 Ответ

0 голосов
/ 14 июля 2020

Нашел решение. Flask не может распознавать никакие внешние папки, только такие, как static / и templates /. Изменил мою папку ресурсов / на статическую /. Работает как шарм!

...