我正在为Google App Engine使用Windows启动器开发环境。

我已经下载了django 1.1.2来源,并没有刻苦“ django”子目录以在我的应用程序目录中生活(app.yaml的peer)

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

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

在我的file steratings.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 以及位于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 Engine)。

其他提示

我遇到了完全相同的问题,而且我无法解决问题……尽管我注意到它与真正的GAE相比,与我在Linux Workstation上运行的开发服务器相比,它的发生率要少得多。 。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top