2010-03-16 2 views
4

Je suis un débutant python et commence avec l'utilisation du cadre Web Bottle sur Google App Engine. J'ai joué avec le super petit échantillon Hello World et j'ai déjà rencontré des problèmes. Il h. J'ai finalement obtenu le code de travailler avec cette ...Erreur débutant python en ce qui concerne l'importation

import bottle 
from bottle import route 
from google.appengine.ext.webapp import util 

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

util.run_wsgi_app(bottle.default_app()) 

Ma question est, je pensais que je pouvais aller « bouteille d'importation » sans la deuxième ligne. Mais si je prends la deuxième ligne, je reçois un NameError. Ou si je fais 'd'importation de bouteille *', je reçois toujours l'erreur. La bouteille est juste un fichier unique appelé «bottle.py» dans le répertoire racine de mon site. Donc, aucune de ces travaux ....

import bottle 
from google.appengine.ext.webapp import util 

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

util.run_wsgi_app(bottle.default_app()) 

Ou

from bottle import * 
from google.appengine.ext.webapp import util 

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

util.run_wsgi_app(bottle.default_app()) 

Le message d'erreur que je reçois est ...

Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3180, in _HandleRequest self._Dispatch(dispatcher, self.rfile, outfile, env_dict) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3123, in _Dispatch base_env_dict=env_dict) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 515, in Dispatch base_env_dict=base_env_dict) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2382, in Dispatch self._module_dict) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2292, in ExecuteCGI reset_modules = exec_script(handler_path, cgi_path, hook) File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2188, in ExecuteOrImportScript exec module_code in script_module.dict File "/Users/tyler/Dropbox/sites/dietgrid/code2.py", line 4, in @route('/') NameError: name 'route' is not defined

Alors je me trompe en pensant que ce devrait être en mesure travailler les autres moyens ou non?

Répondre

8

Dans votre code, vous avez deux façons d'appeler des méthodes différentes de l'emballage de la bouteille.

route('/hello') 

et

bottle.default_app() 

appel nécessite d'abord from bottle import route ou from bottle import * et seconde nécessite import bottle.

from foo import bar vous permet d'utiliser la méthode ou le paramètre bar dans votre code sans spécifier le package à chaque appel.

3

route fait partie du module bottle.

Ce qui suit devrait résoudre le problème

import bottle 
... 

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

... 
2

Vous pouvez simplement importer une bouteille dans votre espace de nom, donc chaque fois que vous souhaitez utiliser quelque chose à partir de là, vous avez bottle. comme préfixe. L'autre façon est d'importer les parties de bouteille que vous allez utiliser dans votre espace de noms.

from bottle import route, default_app 
from google.appengine.ext.webapp import util 

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

util.run_wsgi_app(default_app()) 
5

En ce qui concerne la raison pour laquelle

from bottle import * 

ne pas faire l'affaire: lorsque vous importez comme ça, seuls les noms qui sont spécifiés dans la liste des _____all_____ de bouteille sont importés. Donc, si la route est pas là, vous devez spécifier explicitement l'importation:

from bottle import route 
+0

Génial, merci. – TylerW

0

Moi aussi appris à utiliser avec bouteille GAE, en raison de sa très petite taille. Ce que vous pouvez faire est de garder la bouteille directement avec vos fichiers principaux, cela vous permettra d'utiliser 'importer bouteille', ou mettre dans un dossier (pour le séparer des autres fichiers, donner une structure soignée), et ajouter un fichier __init__.py vide ce dossier. Ensuite, vous pouvez l'importer en tant que import bottle from <foldername> et ainsi de suite.J'ai écrit un petit tutoriel sur how to use Bottle with GAE.