2013-12-08 2 views
1

Я пытаюсь получить приложение Django 1.5 Hello World, работающее с Google App Engine. Все работает отлично если моя структура каталогов выглядит так:Google App Engine + Django с несколькими приложениями в проекте = ImportError

. 
| ____myproj 
| |______init__.py 
| |____app.yaml 
| |____settings.py 
| |____urls.py 
| |____views.py 
| |____wsgi.py 
|____manage.py 

Однако, как только я добавить новое «приложение» к проекту (с использованием manage.py startapp app1), я начинаю получать ImportErrors.

Это идеальная структура Я хочу:

. 
|____app1 
| |______init__.py 
| |____admin.py 
| |____models.py 
| |____tests.py 
| |____views.py 
|____myproj 
| |______init__.py 
| |____app.yaml 
| |____settings.py 
| |____urls.py 
| |____views.py 
| |____wsgi.py 
|____manage.py 

Чтобы включить "APP1", я модифицировать INSTALLED_APPS в моем settings.py к:

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'app1', 
) 

Обратите внимание, я добавил "APP1" в INSTALLED_APPS. Как только я это сделаю, GAE начинает жаловаться: ImportError: Нет модуля с именем app1.

Что я делаю неправильно? Если я попытаюсь запустить приложение с чистым Django (не AppEngine), все будет в порядке. Но если я попытаюсь запустить его с помощью AppEngine, мне не понравится, что «app1» я добавил в свой INSTALLED_APPS. Удаление этой строки из INSTALLED_APPS заставляет все работать снова без ошибок в AppEngine!

Примечание: у моего PYTHONPATH есть «/ Users/mel/Sites/myproj/myproj», за которым следуют все стандартные пути движка Google.

ответ

0

Как правило, проект django не организован.

Прямо сейчас, ваше приложение живет внутри проекта. Вместо этого они должны жить бок о бок.

Предполагая, что ваш проект назван proj и приложение app, это то, что ваш слой каталога должен выглядеть следующим образом:

. 
├── manage.py 
├── app 
│   ├── __init__.py 
│   ├── admin.py 
│   ├── models.py 
│   ├── tests.py 
│   └── views.py 
└── proj 
    ├── __init__.py 
    ├── settings.py 
    ├── urls.py 
    └── wsgi.py 
+0

Это именно то, как организован мой каталог. Я думаю, вы неправильно истолковали структуру в моем вопросе. – melsam

+0

@melsam Я так не думаю. Ваша папка приложения не будет жить рядом с вашим файлом 'manage.py' и вместо этого будет находиться рядом с вашим файлом' settings.py'. Если это неверно, вы должны исправить отступы в своем вопросе (или сгенерировать макет с помощью 'tree', чтобы он стал более понятным). –

+0

@melsa Чтобы быть яснее: 'app1' должно быть * рядом * с' myproject', а не под ним. –

2

решаемым это сам! Это оказалось ошибкой конфигурации с моей стороны. Когда у вас есть проект Django с несколько приложений, файл app.yaml должен быть «вне» каталога проекта. Другими словами, файл app.yaml должен находиться рядом с manage.py, а не рядом с settings.py. Таким образом, все приложения в вашем проекте автоматически включаются в PYTHONPATH.

Примечание: Вы можете также необходимо добавить следующие 2 строки app.yaml:

env_variables: 
    DJANGO_SETTINGS_MODULE: 'myproj.settings' 
Смежные вопросы