6

Python Web 開発を始めたばかりで、選択したフレームワークとして Bottle を選択しました。

モジュールを中心に構築された「コア」アプリケーションを使用できるという点で、モジュール化されたプロジェクト構造を作ろうとしています。これらのモジュールは、セットアップ中に有効/無効にすることができます (または、可能であればその場で.. .どのように設定するのかわかりません)。

私の「メイン」クラスは次のとおりです。

from bottle import Bottle, route, run
from bottle import error
from bottle import jinja2_view as view

from core import core

app = Bottle()
app.mount('/demo', core)

#@app.route('/')
@route('/hello/<name>')
@view('hello_template')
def greet(name='Stranger'):
    return dict(name=name)

@error(404)
def error404(error):
    return 'Nothing here, sorry'

run(app, host='localhost', port=5000)

私の「サブプロジェクト」(つまりモジュール)はこれです:

from bottle import Bottle, route, run
from bottle import error
from bottle import jinja2_view as view

app = Bottle()

@app.route('/demo')
@view('demographic')
def greet(name='None', yob='None'):
    return dict(name=name, yob=yob)

@error(404)
def error404(error):
    return 'Nothing here, sorry'

ブラウザでにアクセスするhttp://localhost:5000/demoと、500 エラーが表示されます。ボトル サーバーからの出力は次のとおりです。

localhost - - [24/Jun/2012 15:51:27] "GET / HTTP/1.1" 404 720
localhost - - [24/Jun/2012 15:51:27] "GET /favicon.ico HTTP/1.1" 404 742
localhost - - [24/Jun/2012 15:51:27] "GET /favicon.ico HTTP/1.1" 404 742
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.10.9-py2.7.egg/bottle.py", line 737, in _handle
    return route.call(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle-0.10.9-py2.7.egg/bottle.py", line 582, in mountpoint
    rs.body = itertools.chain(rs.body, app(request.environ, start_response))
TypeError: 'module' object is not callable

フォルダ構造は次のとおりです。

index.py
views (folder)
|-->hello_template.tpl
core (folder)
|-->core.py
|-->__init__.py
|-->views (folder)
|--|-->demographic.tpl

私は自分が何をしているのかわかりません(間違っています):)

これをどのように行うことができるか/行うべきか誰にも分かりますか?

ありがとう!

4

1 に答える 1

8

モジュール「コア」をmount()関数に渡しています。代わりに、ボトル アプリ オブジェクトを mount() 関数に渡す必要があるため、呼び出しは次のようになります。

app.mount("/demo",core.app)

以下は、mount() 関数の正式なドキュメントです。

mount(prefix, app, **options)[source]

アプリケーション (ボトルまたはプレーン WSGI) を特定の URL プレフィックスにマウントします。
例:

root_app.mount('/admin/', admin_app)

パラメータ:
prefix – パスのプレフィックスまたはマウント ポイント。スラッシュで終わる場合、そのスラッシュは必須です。
app – Bottle または WSGI アプリケーションのインスタンス

于 2012-06-25T02:12:03.470 に答える