QA@IT

python flaskを使ったデータの受け渡しについて

1879 PV

私は、最近pythonの勉強を始めたのですが、写真のようなhtmlページを作り、

馬の名前はwebスクレイピングでサイトからもってきており、

このhtmlの馬の名前のボタンが押されたら、押された名前のツイートを取得するというアプリ開発を行っています。

しかし、馬の名前のボタンが押されたら、その名前でtweet検索する機能がうまく作れません。

どのように値を渡してやれば上手くいくのでしょうか?

#競馬情報の取得

res = requests.get('#########################')
res.raise_for_status()
res.encoding = cchardet.detect(res.content)["encoding"]

soup = BeautifulSoup(res.content, 'html.parser')



#馬の名前の取得
def horse():
    horses_rank = soup.select('td')
    horses = horses_rank[0::2]
    horse_text = []
    for horse in horses:
        horse_text.append(horse.getText())
    return horse_text


def twitter_text():
    CK = config.CONSUMER_KEY
    CS = config.CONSUMER_SECRET
    AT = config.ACCESS_TOKEN
    ATS = config.ACCESS_TOKEN_SECRET
    twitter = OAuth1Session(CK, CS, AT, ATS)

    url = "https://api.twitter.com/1.1/search/tweets.json"


    keyword = '??????????'←ここにボタンが押されたときに名前を格納したい!!


    params = {'q': keyword, 'count': 20}
    req = twitter.get(url, params=params)
    tw = []
    if req.status_code == 200:
        search_timeline = json.loads(req.text)

        for tweet in search_timeline['statuses']:
            tw.append(tweet['user']['name'])
            tw.append(tweet['text'])
            tw.append(tweet['created_at'])
    else:
        print("ERROR: %d" % req.status_code)
    return tw


@application.route('/', methods=["POST"])
def index():
    Horses = horse()

    return render_template('index.html', Horses=Horses)

@application.route('/horse', methods=['POST'])
def test():
    keyword = request.args.get('name')
    Tws = twitter_text()
    if request.method == 'POST':
        return render_template('index2.html', Tws=Tws )

def main():
    application.debug = True
    application.run()

if __name__ == '__main__':
    main()

htmlのコードはこのような感じです。

<!DOCTYPE html>
<html lang="ja" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>競馬ナビ</title>
    <link rel="stylesheet" href="/static/css/main1.css">
    <link href="https://fonts.googleapis.com/css?family=Kosugi+Maru" rel="stylesheet">
</head>

<div class="box1">
    <h1>競馬ナビへようこそ!!</h1>
</div>

<div class="box2">
    <p><img src="/static/images/keiba.jpg"></p>
</div>

<div class="box3">
<p>人気の馬ランキング!!</p>
</div>

<table class="list">
        <h1>馬の名前</h1>

    {% for Horse in Horses %}
    <form action="/horse">
    <tr>
    <td><button type="submit" formmethod="post" name="name">{{ Horse }}</button></td>
    </tr>
    </form>
        {% endfor %}
</table>

</body>
</html>

画面はこのような感じです
無題.png

POSTやGETを調べてみたのですが、よく扱いが分かっていません。プログラムも見づらいかもしれませんが、よろしくお願い致します。

回答

HTML側にvalueが必要かも。

<button type="submit" formmethod="post" name="name" value={{ Horse }} >{{ Horse }}</button>
編集 履歴 (0)
  • ありがとうございます。valueを加えるだけで、できました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。