带有 GAE 的 Yaml 寻址和模板不起作用? TemplateDoesNotExist 只需简单地更改 yaml ?

Posted

技术标签:

【中文标题】带有 GAE 的 Yaml 寻址和模板不起作用? TemplateDoesNotExist 只需简单地更改 yaml ?【英文标题】:Yaml addressing and template with GAE is not working ? TemplateDoesNotExist just by simple change in yaml ? 【发布时间】:2011-12-28 02:28:10 【问题描述】:

我在通过 Python 在 Google App Engine 中使用模板时遇到问题。 问题是,当我在 Yaml 中处理我的静态文件夹时,我无法访问我的模板,当我删除它时,它可以访问。查看文件。

this is my file structure
-src\
----\calc.py
----\main.py
----\index.html
----templ\
---------\calc.html
---------\js
---------\css

YAML:
handlers:
- url: /.*   script: main.py

MAIN.PY
def main():
    application = webapp.WSGIApplication([
      ('/', MainPage),
      ('/calc',Calc)
      ], debug=True)
    wsgiref.handlers.CGIHandler().run(application)

Calc.py
class Calc(webapp.RequestHandler):
    def get(self):
            temp = os.path.join(os.path.dirname(__file__), 'templ/calc.html')
            outstr = template.render(temp, temp_val)
            self.response.out.write(outstr)

结果是: 状态:200 OK 内容类型:文本/html;字符集=utf-8 我可以访问我的文件并且模板地址正在工作

呸呸呸

当我将以下行添加到我的 YAML 以访问我的 css 和 js 等时。 IT 无法访问

YAML:

    handlers:
    - url: /.*
      script: main.py

    - url: /templ
      static_dir: templ

or If i change order of them :
YAML:

    handlers:
    - url: /templ
      static_dir: templ

    - url: /.*
      script: main.py

两者都不起作用,这是我的错误

状态:500 内部服务器错误

Traceback(最近一次调用最后一次):
  __call__ 中的文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/_webapp25.py”,第 701 行
    handler.get(*groups)
  文件“/Users/em/Documents/workspace/NerkhARZ/src/calc.py”,第 26 行,在 get
    outstr = template.render(temp, temp_val)
  文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py”,第 88 行,在渲染中
    t = 加载(模板路径,调试)
  加载中的文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py”,第 185 行
    返回 _load_user_django(路径,调试)
  _load_user_django 中的文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py”,第 110 行
    模板 = django.template.loader.get_template(file_name)
  文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/template/loader.py”,第 79 行,在 get_template
    来源,来源 = find_template_source(template_name)
  文件“/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/template/loader.py”,第 72 行,在 find_template_source
    提出 TemplateDoesNotExist,名称
TemplateDoesNotExist: calc.html

请帮我解决这个问题,必须有简单的解决方案。我真的不相信GAE有那么傻......

在此感谢您

【问题讨论】:

【参考方案1】:

app.yaml 中指定为静态的文件不可用于 Python 运行时中的应用程序代码。它们仅直接提供给用户的浏览器,以响应与app.yaml 中的正则表达式匹配的请求。

不要将模板标记为静态。只有应按原样提供给用户的文件(例如 javascript、CSS 和图像)才应标记为静态。

【讨论】:

好的,我明白你的意思了,顺便说一句,是否有任何选项可以从整个目录中排除这个特定文件? 没有。将模板和内容静态存储在不同的目录中。 我已将结构更改为:'---/app/*.py ---/templates/*.html' 如何在 Yaml 中定义它?你有什么想法吗? app.yaml 中根本没有提到您的模板;只有静态直接提供给用户浏览器的脚本和文件才可以。【参考方案2】:

除了 Wooble 发现的问题之外,您还在 .* 脚本处理程序之后添加了 static_dir 处理程序。处理程序按顺序处理,因此static_dir 处理程序将永远不会被执行,因为所有请求都被.* 捕获。

【讨论】:

以上是关于带有 GAE 的 Yaml 寻址和模板不起作用? TemplateDoesNotExist 只需简单地更改 yaml ?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask-Restless 进行 GAE app.yaml 路由

带有模板的 std::sort 和 compare-function 不起作用

GAE 裸到 www 自定义域映射不起作用

Datanucleus GAE 拥有的关系不起作用

将参数传递给 app.yaml Google App Engine 中的 php

Go 客户端访问 GAE 登录所需的应用程序