GAE / Python / jinja2 / 如何在join语句中引用子目录
Posted
技术标签:
【中文标题】GAE / Python / jinja2 / 如何在join语句中引用子目录【英文标题】:GAE / Python / jinja2 / How to reference a subdirectory in join statement 【发布时间】:2012-08-20 12:07:44 【问题描述】:我的根目录的子目录“static”中有一个 html 文件“listagem.html”。 我想使用“listagem.html”作为 jinja2 的模板。
我尝试了这 3 个连接公式:
第一:
jinja_environment = jinja2.Environment(
autoescape = True,
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'static')))
第二:
jinja_environment = jinja2.Environment(
autoescape = True,
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'static/')))
第三:
jinja_environment = jinja2.Environment(
loader = jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), '/static')))
template = jinja_environment.get_template('listagem.html')
self.response.out.write(template.render(template_values))
并收到此错误:
file not accessible: 'C:\\Users\\Me\\AppEngine\\MyAppRoot\\static\\listagem.html'
我做错了什么?
坦克寻求帮助。
【问题讨论】:
【参考方案1】:您可能在app.yaml
文件中添加了static_dir
url 处理程序,并将static
目录(您的模板所在的位置)设置为static_dir
。
这会使您的文件无法访问,因为static files are not available in the application's file system。
从app.yaml
文件中删除static_dir
,并在您的项目文件夹中添加一个静态模板文件夹。
创建一个jinja环境如下:
jinja_environment = jinja2.Environment(autoescape=True,
loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'static')))
【讨论】:
如果它有效,您可以接受答案,以帮助看到问题的其他人 只是用一些看起来很明显的东西来扩展它,但如果一个文件与skip_files
正则表达式匹配,你也会得到IOError
。所以,不能是静态的,路径也不能跳过。【参考方案2】:
你有一个错误。 1. 在你的 appengine 配置文件中,你需要同样的代码:
application: yourapp
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /js
static_dir: static/js
- url: /css
static_dir: static/css
- url: /img
static_dir: static/img
- url: .*
script: main.app
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
看那个“- url items”...这是你的静态内容(js css img) 对于您的 html 模板,您需要根应用程序的子文件夹模板,在我的情况下是 myapp/template 并在里面放置您的模板(模板内容,html)
您的主应用程序看起来像这样。 main.py
import os
import webapp2
import jinja2
jinja_environment = jinja2.Environment(autoescape=True,
loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))
class MainHandler(webapp2.RequestHandler):
def get(self):
template_values =
'name': 'nombre',
'verb': 'programando'
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(template_values))
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)
【讨论】:
以上是关于GAE / Python / jinja2 / 如何在join语句中引用子目录的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jinja2 在 GAE 中存储 Javascript 对象
Python / Django / Jinja2:如何用另一个变量的值扩展变量名(例如在 for 循环中)?