2

所以我尝试使用 django 1.1 模板引擎和谷歌应用引擎网络应用框架,从这里。这是在 Ubuntu Jaunty 上,我确保 PYTHONPATH 包含 Django-1.1.1 的位置,但是当它尝试执行下面的 use_library() 行时,我收到了“ImportError: No module named django”错误。再次,有人可以帮助我吗?我难住了。

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.1')
4

2 回答 2

3

想出了以下解决方案:

获取 django 1.1 并将其放在您的项目根目录下。

将一个空文件“non_gae_indicator”添加到您的项目根文件夹。

将 django 和 non_gae_indicator 添加到您的app.yaml skip_files 元素中:

skip_files:
- ^(.*/)?app\.yaml
- ^(.*/)?app\.yml
- ^(.*/)?index\.yaml
- ^(.*/)?index\.yml
- ^(.*/)?#.*#
- ^(.*/)?.*~
- ^(.*/)?.*\.py[co]
- ^(.*/)?.*/RCS/.*
- ^(.*/)?\..*
- ^(.*/)?.*\.bak$
- ^django
- ^non_gae_indicator

现在我们有办法判断我们是在 GAE-sdk 下运行还是在 live 下运行 - 因为 non_gae_indicator 在我们 live 时将不可用。

所以在 main.py 你可以这样做:

if not os.path.exists(os.path.abspath(os.path.dirname(__file__)) + '/non_gae_indicator'):
    # GAE
    from google.appengine.dist import use_library
    use_library('django', '1.1')
else:
    # Not GAE - Add our django package to the path
    sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)) + '/django')

您应该使用 --allow_skipped_files 标志运行您的本地 SDK 服务器(否则在检查它们时跳过的文件似乎不存在 - 服务器控制台会发出警告)。

于 2010-09-20T00:50:33.563 回答
0

@stallarida - 问题是 .96 默认随 SDK 一起提供。我最后所做的,这是一个肮脏的黑客,但有效,是将 appengine 目录中的 django 版本更新为 1.1。工作正常,需要在开发和生产之间进行一些调整。具体来说,我必须在本地运行时注释掉,use_library('django', '1.1')但在上传我的应用程序时包含它。

我确信有更好的解决方案,当我的 linux 体验有所改善时,我会解决它。

于 2010-05-24T13:28:24.173 回答