2012-06-24 9 views
6

Estoy comenzando el desarrollo web de Python, y he elegido Bottle como mi marco de referencia.creando subproyectos en botella

Estoy tratando de tener una estructura de proyecto que sea modular, ya que puedo tener una aplicación 'núcleo' que tiene módulos construidos a su alrededor, donde estos módulos pueden habilitarse/deshabilitarse durante la configuración (o sobre la marcha, si es posible ... no estoy seguro de cómo configurarlo tho).

Mi clase 'principal' es el siguiente:

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) 

Mi 'subproyecto' (es decir, módulo) es la siguiente:

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' 

Cuando voy a http://localhost:5000/demo en mi navegador, se muestra una 500 error La salida desde el servidor de botella es:

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 

la estructura de carpetas es:

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

no tengo idea de lo que estoy haciendo (mal) :)

Alguien tiene alguna idea de cómo esto puede/debe hacerse?

Gracias!

Respuesta

8

Usted está pasando el módulo "core" a la función mount(). En su lugar, debe pasar el objeto de la aplicación de la botella a la función mount(), por lo que la llamada sería así.

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

Aquí hay documentos formales para la función mount().

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

monte una aplicación (botella o WSGI normal) a una URL específica prefijo.
Ejemplo:

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

Parámetros:
prefijo - prefijo de ruta o punto de montaje. Si termina en una barra oblicua , esa barra oblicua es obligatoria.
aplicación - una instancia de la botella o una aplicación WSGI

+0

ahhh ok, Gotcha. funciona ahora :) Gracias Rohan! – Jarrett

Cuestiones relacionadas