Pregunta

Estoy desarrollando una aplicación Python App Engine, donde quiero dividir el contenido de un archivo de código fuente Models.py en archivos separados para cada modelo, pero quiero ponerlo todo en una carpeta llamada modelos. El problema es que cuando hago eso, mi aplicación ya no puede encontrar las clases. ¿Qué tengo que hacer?

Esta pregunta no se trata de MVC Pero otra pregunta con el mismo título es.

¿Fue útil?

Solución

Poner un vacío __init__.py Archivo en el directorio de modelos.

Entonces, en tu aplicación; Presumiblemente de un nivel, usted hace referencia a módulos en el directorio de modelos como este:

import Models

Y haz algo con esto así:

Models.my_model.MyClassName

También puedes usar el from Palabra clave como esta:

from Models import my_model

y referencia como esta:

my_model.MyClassName

Si solo necesita un método de un módulo, también puede hacer esto:

from Models.my_model import my_method_name
my_method_name()

Enlace obligatorio al documentación.

Otros consejos

En respuesta a su comentario a la respuesta de Adam, con respecto a tener 10 importaciones para 10 clases, en primer lugar, no olvide que no hay necesidad de tener una clase por módulo en Python. Los módulos deben organizarse por funcionalidad, por lo que puede agrupar clases relacionadas en un solo archivo si eso tiene sentido.

Si aún quisiera hacer todas las clases importables de una vez, podría importarlas todas en el __init__.py Archivo mismo usando el from submodule import Class Sintaxis, luego solo importe el módulo de contenido - import mainmodule y consulte mainmodule.Class1 etc, o incluso usar from mainmodule import Class1, Class2, Class3 para importar las clases directamente a su espacio de nombres y consulte ellas directamente.

Adam Bernier ofrece una buena descripción técnica de cómo funcionan los paquetes. Una gran descripción de cómo organizar y enviar un proyecto se describe en http://jcalderone.livejournal.com/39794.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top