带有 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 不起作用