2009-08-12 6 views
1

Je suis novice en python et en pylônes bien qu'expérimentée en PHP. J'essaie d'écrire une classe de modèle qui agira comme un accès à mes données à ma base de données (couchdb). Mon problème est simpleImporter une classe Model/Lib et appeler depuis le contrôleur

Mon modèle ressemble à ceci et est appelé modèles/BlogModel.py

from couchdb import * 

class BlogModel: 

    def getTitles(self): 
     # code to get titles here 

    def saveTitle(self): 
     # code to save title here 

Mon contrôleur est appelé contrôleurs/main.py

import logging 

from pylons import request, response, session, tmpl_context as c 
from pylons.controllers.util import abort, redirect_to 

from billion.lib.base import BaseController, render 

log = logging.getLogger(__name__) 

from billion.model import BlogModel 

class MainController(BaseController): 

    def index(self): 
     return render('/main.mako') 

Dans mon action index, comment puis-je accéder à la méthode getTitles() dans BlogModel?

J'ai essayé

x = BlogModel() 
x.getTitles() 

Mais je reçois TypeError: objet 'module' est pas appelable

également BlogModel.getTitles() résultats dans AttributeError: objet 'module' n'a pas Attribut 'getTitles'

Est-ce que c'est comme ça que j'inclus la classe? Quelqu'un peut-il me dire la meilleure façon de faire cela?

grâce

Répondre

2
x = BlogModel.BlogModel() 

Ou, plus verbeux:

Une fois que vous avez fait l'importation, vous avez un objet dans votre espace de noms appelé 'BlogModel'. Cet objet est le module BlogModel. (Le nom du module provient du nom de fichier.) A l'intérieur de ce module, il y a un objet de classe appelé "BlogModel", qui est ce que vous recherchiez. (Le nom de la classe provient du code source que vous avez écrit.)

Au lieu de:

from billion.model import BlogModel 

Vous pouvez utiliser:

from billion.model.BlogModel import BlogModel 

alors votre

x = BlogModel() 

fonctionnerait.

+0

+1 Bien expliqué – balpha

+0

En python, il est habituel de nommer les modules en minuscules, pour éviter ce genre de confusion: from billion.model.blogmodel import BlogModel –

Questions connexes