提供HTML文件并在谷歌应用引擎

时间:2017-04-12 20:49:30

标签: google-app-engine jinja2 webapp2

我正在尝试建立一个包含许多静态html文件的网站。目前我使用app.yaml处理程序

将html文件作为静态文件提供
 - url: /(.*)
static_files: www/\1
upload: www/(.*)
secure: always

我现在需要做的是能够在有人被重定向到这些html文件之一时运行一些python代码。

有没有办法将html文件作为静态文件提供,并在调用时运行python脚本?当然除了javascript。

我最初的想法是拥有一个运行脚本的html文件的处理程序,然后该脚本将执行它需要执行的后端任务,然后使用webapp2或jinja将html文件作为模板提供。我的html文件存放在我的python文件中的几个目录中,存放在几个子目录中:

-app.yaml
-main.py
-www
   -version1
       --sub directories stored here

目前我的测试处理程序试图让它工作如下:

class testHandler(BaseHandler):

   def get(self, url):

      tplPath = self.request.url
      parseURL = urlparse(tplPath)

      path = "www" + dirname(parseURL.path)
      filename = basename(parseURL.path)

      return jinja2.Environment(
      loader=jinja2.FileSystemLoader(path)
      ).get_template(filename).render()

这会获取所请求的url或html文件,添加路径的www部分(旁注,我从服务的网址中删除了www部分以使其与旧的网站布局保持一致),然后尝试渲染位于路径文件夹中的html文件。

当我尝试运行时,请访问https:// AppID.appspot.com/version1/product1/index.html,我收到错误

TemplateNotFound: index.html 

我检查了发送到加载程序的路径,它是包含index.html文件的目录的正确路径。

我有什么明显的遗失吗?请记住,使用jinja2的经验非常有限。或者,有没有其他方式我可以运行python脚本仍然提供html文件?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您正在使用模板的相对路径,而Jinja2需要根据this post的绝对路径。因此,请执行以下操作,而不是path = "www" + dirname(parseURL.path)

# assuming that dirname is os.path.dirname:
path = os.path.join(dirname(__file__),"www" + dirname(parseURL.path))

此行的作用是获取目录名__file____file__是您正在运行的当前*.py文件的完整绝对路径。因此,dirname(__file__)是您的工作目录。替换那一行后,其余代码应该可以正常工作。