【问题标题】:How do I use Django 1.2 templates in my Google App Engine project?如何在我的 Google App Engine 项目中使用 Django 1.2 模板?
【发布时间】:2011-06-01 06:12:39
【问题描述】:

谁能推荐一个在我们的 GAE 应用程序中包含 django 1.2 模板的详细资源?到目前为止,我已经找到了

  1. 描述如何压缩 django 文件并将它们添加到我们的项目中的文档
  2. 有关在 GA 中运行原生 django 项目的文档
  3. 关于在我们的项目中包含 1.0 和 1.1 库的文档

但还没有描述如何在我们的项目中使用 django 1.2 模板。具体来说,如何在我的 python 脚本顶部制定神秘的魔法,这将神奇地说服 GAE 使用我压缩的 django 库。

我的 python 脚本中有这个:

import sys
sys.path.insert(0, 'django/django.zip')

与 GAE 教程类似,这是我渲染模板的方式:

template_values = {
    'formerror': formerror,
    'media': media,
    'status': status
}

path = os.path.join(os.path.dirname(__file__), formtemplate)
self.response.out.write(template.render(path, template_values)

但是 GAE 使用 Django 1.2 呈现模板时缺少一些内容。这是什么?

【问题讨论】:

  • 如果我理解正确:您想使用 Google 的 webapp 框架编写您的应用程序,但使用 Django 1.2 模板。上述尝试以何种方式失败?如果您遵循上面提到的“关于包含 1.0 和 1.1 库的文档”会发生什么?这篇文章是您尝试过但失败的资源之一吗? code.google.com/appengine/articles/django-nonrel.html

标签: python django google-app-engine django-templates


【解决方案1】:

我用过这个:

from google.appengine.dist import use_library
use_library('django', '1.1')
from google.appengine.ext.webapp import template

在这种情况下,我使用的是 1.1 版本,但我认为它应该适用于 1.2。

【讨论】:

    【解决方案2】:

    前段时间我遇到了同样的问题 - 我想为模板使用 1.2 版而不是 0.96 版(由 GAE 提供)。以下代码似乎对我有用。

    # some standard Google App Engine imports (optional)
    import wsgiref.handlers
    from google.appengine.ext import webapp
    from google.appengine.ext import db
    
    # Remove Django modules (0.96) from namespace
    for k in [k for k in sys.modules if k.startswith('django')]:
        del sys.modules[k]
    
    # Force sys.path to have our own directory first, in case we want to import
    # from it. This way, when we import Django, the interpreter will first search
    # for it in our directory.
    sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
    
    # Must set this env var *before* importing any part of Django
    # (that's required in Django documentation)
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    
    # New Django imports
    from django.template.loader import render_to_string
    from django.conf import settings
    
    # Configure dir with templates
    # our template dir is: /templates
    TEMPLATE_DIR = os.path.join(os.path.dirname(__file__),'templates')
    settings.configure(TEMPLATE_DIRS = (TEMPLATE_DIR,'') )
    

    但是,如果您需要来自 Django 的模板,而不需要其他 API,请考虑改用 Jinja。这就是我打算做的。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 2011-02-12
      • 2011-12-19
      • 2013-03-11
      • 2010-10-23
      • 2012-03-04
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多