2012-06-24 6 views
6

私はちょうどPython Web開発を開始しています。ボトルを自分のフレームワークとして選択しました。ボトルにサブプロジェクトを作成する

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

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 

私はどのように任意のアイデアを持っている(間違った):)

誰もがやっている見当がつかないこれはできます/する必要がありますか?

ありがとうございます!

答えて

8

モジュール "core"をmount()関数に渡します。代わりに、ボトルappオブジェクトをmount()関数に渡す必要があります。したがって、呼び出しは次のようになります。

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

ここには、mount()関数の正式なドキュメントがあります。

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

マウント特定のURL プレフィックスへの応用(ボトルまたはプレーンWSGI)。
例:

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

パラメータ:
プレフィックス - パス接頭辞またはマウントポイントを。スラッシュの末尾が の場合、そのスラッシュは必須です。
アプリ - ボトルのインスタンスまたはWSGIアプリケーション

+0

OKああ、落とし穴。今動作します:)ありがとうRohan! – Jarrett

関連する問題