5

我正在为 Google App Engine 使用 Windows Launcher 开发环境。

我已经下载了 Django 1.1.2 源代码,并将“django”子目录解压缩到我的应用程序目录中(app.yaml 的对等)

在每个 .py 源文件的顶部,我这样做:

import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'

在我的文件 settings.py (也位于应用程序目录的根目录)中,我这样做:

DEBUG = True
TEMPLATE_DIRS = ('html')
INSTALLED_APPS = ('filters')

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

是的,这看起来有点矫枉过正,不是吗?

我只使用 django.template。我没有明确使用 django 的任何其他部分。

但是,我间歇性地遇到两个错误之一:

1) Django 抱怨 DJANGO_SETTINGS_MODULE 没有定义。
2) Django 抱怨 common.html(我在其他模板中扩展的模板)不存在。

95% 的情况下,这些错误不会遇到,它们只是随机开始发生。一旦处于该状态,本地服务器似乎“楔入”并重新启动它通常会修复它。

是什么导致这种情况发生,我能做些什么呢?我怎么能调试它?

这是错误的回溯:

Traceback (most recent call last):
  File "C:\code\kwbudget\edit_budget.py", line 34, in get
    self.response.out.write(t.render(template.Context(values)))
  File "C:\code\kwbudget\django\template\__init__.py", line 165, in render
    return self.nodelist.render(context)
  File "C:\code\kwbudget\django\template\__init__.py", line 784, in render
    bits.append(self.render_node(node, context))
  File "C:\code\kwbudget\django\template\__init__.py", line 797, in render_node
    return node.render(context)
  File "C:\code\kwbudget\django\template\loader_tags.py", line 71, in render
    compiled_parent = self.get_parent(context)
  File "C:\code\kwbudget\django\template\loader_tags.py", line 66, in get_parent
    raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
TemplateSyntaxError: Template u'common.html' cannot be extended, because it doesn't exist

而 edit_budget.py 正是从我最上面包含的行开始的。

所有模板都位于我的根目录中名为“html”的目录中,并且存在“html/common.html”。我知道模板引擎会找到它们,因为我从扩展 common.html 的“html/edit_budget.html”开始。
看起来好像设置模块以某种方式未应用(因为这就是将 html 添加到模板搜索路径的原因)。

4

2 回答 2

1

首先,尽管 django 现在与应用引擎的兼容性比以前要好很多,但两个平台之间仍然存在一些主要的不兼容性,这意味着你不能只是将 django 的库存副本转储到你的 appengine 目录中并让它工作盒子。事情会以奇怪的方式出错。

有许多项目旨在提高两个项目之间的兼容性,其中最突出的是 app-engine-patch。我强烈建议阅读以下文章http://code.google.com/appengine/articles/app-engine-patch.html以及位于 django 标签下 code.google.com/appengine/articles/ 的其余文章.

至于你们中的一些具体问题,你可以在你的安装脚本中尝试这个:

#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)

这是 django 在内部用于在 manage.py 中设置环境的方法,并且是设置 django 以与脚本(如应用程序引擎)一起使用的公认最佳实践。

于 2010-07-06T08:59:48.497 回答
0

我遇到了完全相同的问题,但我无法解决它......虽然我注意到真正的 GAE 发生的情况比我在我的 Linux 工作站上运行的开发服务器发生的要少得多.

于 2010-07-01T20:13:34.940 回答