在瓶子中创建子项目

时间:2012-06-24 20:03:20

标签: python frameworks module bottle

我刚刚开始进行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

我不知道我在做什么(错误):)

任何人都知道如何/应该如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:8)

你正在传递模块&#34;核心&#34;到mount()函数。相反,你必须将瓶子app对象传递给mount()函数,所以调用就像这样。

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

以下是mount()函数的正式文档。

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

将应用程序(Bottle或plain WSGI)挂载到特定URL   前缀。
示例:

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

参数:
前缀 - 路径前缀或挂载点。如果它以a结尾   斜线,斜线是强制性的。
   app - Bottle或WSGI应用程序的实例