質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

ウェブページのURLから別のページを表示させる

受付中

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 184

Leon_Na

score 3

WebページにあるURLをクリックしたら特定のページに遷移したいです。

以下はやりたいことのイメージ図です。わかりにくかったらごめんなさい。
イメージ説明

やりたいことはウェブページに無数に表示されるURLから特定のURLをクリックすると、そのページに遷移して、書誌のより詳細な情報を表示させるというものです。そのために選択されたURLの値を以下に示すコードの3個目の@app.routeで取得したいのですが、うまくいきません。おそらくJavascriptを使うのでしょうが、Javascriptは全然わからないので教えて下さらないでしょうか。。。大学の課題です。。。。。

実行したコードは以下の通りです。

import os
import sqlite3
from flask import Flask, render_template, escape, request
from flask_ngrok import run_with_ngrok

os.environ["FLASK_ENV"] = "development"
os.chdir("/content/gdrive/My Drive/cje1s1911509/")

app = Flask(__name__)
run_with_ngrok(app)

@app.route("/e5-1.html")
def e44():
  return render_template("e5-1.html")


@app.route("/showname", methods = ["POST"])
def sample():
  i = 0
  con = sqlite3.connect("/content/gdrive/My Drive/cje1s1911509/test.db")
  cur = con.cursor()
  key1 = request.form["key1"]
  key2 = request.form["key2"]
  key3 = request.form["key3"]
  key4 = request.form["key4"]
  key5 = request.form["key5"]
  key6 = request.form["key6"]
  key7 = request.form["key7"]
  andor = request.form["andor"]
  if not key1 == "":
    s = "<!DOCTYPE html>\n"
    s += "<html><body>"
    for row in cur.execute('select * from sample16 where ' + keycon(key1)):
      s += "<p>i/{}/{}/<a id = "sample" href= '/" + str(i) + "detail.html'>詳細を表示</a></p\>".format(escape(row[1]), escape(row[2]))
      i +=1
    return s
    s += "</body></html>"
    con.close()
  else:
    s = "<!DOCTYPE html>\n"
    s += "<html><body>"
    for row in cur.execute('select * from sample16 where ' + fieldsearch(key2,key3,key4,key5,key6,key7,andor)):
      s += "<p>/{}/{}/<a id = "sample"  href= '/" + str(i) + "detail.html'>詳細を表示</a></p\>".format(escape(row[1]), escape(row[2]))
      i +=1
    return s
    s += "</body></html>"
    con.close()
def link():


@app.route('/' + str(i) + 'detail.html')
def detail():
  s = "<!DOCTYPE html>\n"
  s += "<html><body>"
  #for listvalues in list[i]:
    #s += "<p>listvalues</p>"
  return s
  s += "</body></html>"

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

発生している問題・エラーメッセージ

エラーメッセージは、name 'i' is not definedです。
3個目の@app.routeで取得でurlをうまく取得できません。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

-1

クイックスタート — Flask v0.5.1 documentationを参考にさせていただきました。

 変数ルール

現代のWebアプリケーションは非常に単純明快なURLを持っているため、人々はURLを覚えることができます。 これはネットワーク接続の遅い携帯デバイスから利用されるアプリケーションにとって非常に有用なことです。 もしユーザーがインデックスページを経由せずに直接望んだページにいけるなら、ユーザーは そのページに繰り返し好んで訪れることになるでしょう。
URLに変数部分を付け加えるために、 <variable_name> として特別にセクションをマーキングすることができます。 そのような部分はファンクションへのキーワードアーギュメントとして略記されます。 <converter:variable_name> でルールを特定することにより、コンバーターを特定することもできます。 以下に例を示します。
※省略
以下のコンバーターが存在することが分かります。

int 整数を受け入れる
float int と同様、浮動小数点を受け入れる
path デフォルト同様だが、スラッシュも受け入れる

※表示が崩れてしまうので、一部省略させていただきました。

#省略
@app.route('/<int:i>detail.html')
def detail(i):
  s = "<!DOCTYPE html>\n"
  s += "<html><body>"
  #for listvalues in list[i]:
    #s += "<p>listvalues</p>"
  return s
  s += "</body></html>"
#省略


これでどうでしょうか?Javascriptは一切使っていません。
環境の問題で、動作チェックを行なっていません。後日行います。
私も似たようなシステムを作っていたので、参考になることがあれば、聞いていただければ幸いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/15 10:46

    ご返信ありがとうございます。
    その形で実行してみましたが、やはりうまくいきませんでした。
    もう少しvalue_nameについて調べてみて、試行錯誤してみたいと思います。
    それでもできなかったら、また質問させていただきたいです。よろしくお願いします。

    キャンセル

  • 2020/07/15 19:14

    どのようなエラーが出ていますか?
    どこでエラーが出ているかは分かりますか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る