我正在使用适用于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中(也位于app目录的根目录下),我这样做:
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”。我知道模板引擎找到它们,因为我从“html / edit_budget.html”开始,它扩展了common.html 看起来好像设置模块没有应用(因为这是将HTML添加到模板的搜索路径中)。
答案 0 :(得分:1)
首先,虽然django现在与app引擎的兼容性比以前更多,但两个平台之间仍存在一些主要的不兼容性,这意味着你不能只将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用于脚本(如app引擎)的最佳实践。
答案 1 :(得分:0)
我遇到了完全相同的问题,而且我无法解决这个问题...虽然我发现实际的GAE比我运行的开发服务器的情况要少得多我的Linux工作站。