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

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

ただいまの
回答率

90.50%

  • Python 3.x

    6405questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Bottle

    55questions

    Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

python3 bottle 外部ファイルを認識したい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 155

Sample_Test

score 138

python3 bottle 外部ファイルを認識したい

現状

HTMLファイルにアクセスできて居るかも分かりません。

 現状のコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#  http://localhost:8080/hello

from bottle import route, run, static_file

@route('/hello')
def hello():
    return "Hello World"

@route('/file/<filename:path>')
def static(filename):
    return static_file(filename, root="/home/use/work1/static/html")

run(host='localhost', port=8080, debug=True)
#run(host='0.0.0.0', port=8080, debug=True, reloader=True)

フォルダ構造

    use/
        Sample_Demo/
            work1/
                hello.py
                static/
                    html/
                        index.html
                        js/
                            untitled.js
                        css/
                            default.css

 bottle python 外部ファイル読み込み

#bottle 公式ページより抜粋
@route('/static/<filename>') #1
def server_static(filename): #2
    return static_file(filename, root='/path/to/your/static/files') #3

解らない所
1の''の部分[何を指してるのか不明]
1の<filename>最終部分<filename:path>の箇所[直接拡張子を指定しているのか、どうか?]
2の(filename)[どの様なファイルを指定するのか?]
3のfilenameと何なのか?
3のrootが示すURLはHTMLファイルが有る所で良いのか?

ルートパスが変更されて外部ファイルが読み込めない場合
ルーティングの設定方法とルートパスの視覚化[どの用にルートパスが変化したのか知りたいです]

HTMLファイルにアクセスした場合、
python側で、ファイルの拡張子を読み込んで無いのに、どうして認識されるのか?

参考サイト
https://teratail.com/questions/109710
https://bottlepy.org/docs/dev/tutorial.html#quickstart-hello-world

http://kitabatech.blogspot.com/2014/07/bottle.html
http://h2shiki.hateblo.jp/entry/2016/04/17/020526
https://tmg0525.hatenadiary.jp/entry/2018/03/04/004706
http://d.hatena.ne.jp/graySpace/20170115/1484458307

2,3行で分かりやすく教えて欲しい箇所

コード部分の debug=Trueとreloader=Trueの意味
run(host='0.0.0.0', port=8080, debug=True, reloader=True)

reloader=Trueはサーバーを建てたまま再読込すると反映されると知りました。
debug=Trueのリロードオートは何なのでしょうか?

リロードオート
自動リロード機能とは

参考サイト
takeshid.hatenadiary.jp/entry/2015/12/15/234059

読んでも具体的に、どういったモノなのか分かりませんでした。

 確認済み

reloader=True
これはbottleがコードの編集を認識し再読み込みしてくれるオプション
付けない場合は、コードの反映にbottleの停止起動が必要になります。

参考サイト
http://kitabatech.blogspot.com/2014/07/pythonbottle.html

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

詳細に関しては、やはりドキュメントを読んでもらうのが一番かと思うのですが・・。とりあえず順番に。

@route('/static/<filename>') #1
def server_static(filename): #2
    return static_file(filename, root='/path/to/your/static/files') #3

の部分ですが、例えば質問に挙げておりますコードを実行した後に、ブラウザより

http://localhost:8080/static/hogehoge

http://localhost:8080/static/fugafuga

を開こうとすると、この server_static() 関数が呼ばれます。

つまり、ブラウザで指定した http://アドレス:ポート番号 以降の url-path の部分とその際に呼ばれる関数を結びつけている部分がこの #1 の@route(...)の処理となります。

また上記からわかるように、この時に指定するPATHの指定では <>で囲った箇所(上記のコードでは <filename>)を ワイルドカードとして扱います。
このワイルドカードの部分は、関数がコールされる時に引数として通知されます。
つまり上記の例では

http://localhost:8080/static/hogehoge

をコールすると、server_static()関数が呼ばれ、引数として finename="hogehoge" が与えられることになります。

更に、このワイルドカード の部分はマッチする条件を指定することが出来まして、例えば

@route('/static/<filename:int>')

とすると<filename>の箇所がint型の数値 の場合以外マッチしなくなります。
今回は

@route('/static/<filename:path>')

:path を指定しておりますが、これはサブディレクトリを含むPATHにもマッチするようにする為のものです。これにより例えば

http://localhost:8080/static/hogehoge/fugafuga

がコールされたときもserver_static()関数が、引数 finename="hogehoge/fugafuga" で呼ばれるようになります。

最後に #3 の部分ですが、今回の場合はrootに hello.py からの相対パスで

return static_file(filename, root='static/')

と記述しておき、 filename="html/index.html" が引数で渡るように

http://localhost:8080/file/html/index.html

のようにコールするとindex.htmlが表示されるかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • Python 3.x

    6405questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Bottle

    55questions

    Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。