terasima712
@terasima712 (ゆき 寺島)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

自作アンケートページの回答を保存してからページを更新したい

動的なアンケートサイトの作成

Google colab上でflaskを用いてアンケートをのためのWebアプリを作成しようとしています。
自動で画像を生成し、それに対する点数を回答とし、その回答を元に新しい画像を生成してまた回答を集めるという内容にしています。

発生している問題・エラー

from flask import Flask, render_template, request#追記変更
from flask_ngrok import run_with_ngrok
import sqlite3


img_url = #画像urlを生成する部分(省略)

app = Flask(__name__)
run_with_ngrok(app)  # Start ngrok when app is run

@app.route("/")
def index():
  return render_template("index.html")

@app.route("/loc", methods = ["GET","POST"])
def loc():
  if request.method == 'POST':
    id = uuid.uuid1()
    y = request.form.get('y')
    write_db(dbname, y, img_url) #データベースへ画像URLと回答を登録
    img_url = create_img(y, img_url) #画像URLと回答をもとに、新しい画像URLを生成

    return render_template("loc.html", image = img_url)#新しく生成した画像URLをもとにページを更新し、それに遷移する
  else:
    #開くだけならURLでリクエストなのでGET
    return render_template("loc.html", image = img_url)


if __name__ == '__main__':
  app.run()

これを実行すると以下のように

write_db(dbname, y, img_url) #データベースへ画像URLと回答を登録
UnboundLocalError: local variable 'img_url' referenced before assignment

ローカル変数img_urlが定義されていないと出てきます。(グローバルでしか定義していないので当たり前なのですが)
画像URLを回答yを両方sqlite3のテーブルに保存するためにはどうすれば良いでしょうか?

loc.htmlの内容です。img_urlを引数とし、画像を表示できるようにしています。

<title>アンケート</title>
<body>
<form action="/loc" name="locdata" method="POST">
<input type="text" name="y" value="この画像に0から9で点数をつけてください">
<input  type="submit" value = "送信">
</form>
    <img src = "{{img_url}}">
<script>

function displayData(y) {
    const formElements = document.forms.locdata
    formElements.y.value = y;
}
</script>

index.htmlの内容です。このページはただ文字列と書いてあるだけで構わないです。

<title>アンケート</title>
<body>
<form action="/loc" name="locdata" method="POST">
<input type="text" name="y" value="この画像に0から9で点数をつけてください">
<input  type="submit" value = "送信">
</form>
<h1>The Images</h1>
<script>

function displayData(y) {
    const formElements = document.forms.locdata
    formElements.y.value = y;
}
</script>
0

1Answer

ローカル変数img_urlが定義されていないと出てきます。

ローカル変数を「設定する前に参照している」というエラーが出ています。
グローバル変数なら、global img_url で教えてあげる必要があります。

1Like

Comments

  1. @terasima712

    Questioner

    ありがとうございます!解決しました

Your answer might help someone💌