我正在为 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 添加到模板的搜索路径)。
最佳答案
首先,虽然 django 现在与 App Engine 的兼容性比以前好很多,但两个平台之间仍然存在一些主要的不兼容性,这意味着您不能将 django 的库存副本转储到您的 Appengine 目录中并拥有它开箱即用。事情会以奇怪的方式出错。
有许多项目旨在提高两个项目之间的兼容性,最突出的是 app-engine-patch。我强烈建议阅读以下文章 http://code.google.com/appengine/articles/app-engine-patch.html其余文章位于 code.google.com/appengine/articles/的 django 选项卡下。
至于你们中的一些具体问题,你可以在你的设置脚本中尝试这个:
#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)
这是 django 在内部用于在 manage.py 中设置环境的内容,也是设置 django 以与脚本(如应用程序引擎)一起使用的最佳实践。
关于python - 带有本地 Django 1.1 的 Google App Engine 出现间歇性故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986258/