我正在尝试建立一个包含许多静态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文件?任何帮助表示赞赏。
答案 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__)
是您的工作目录。替换那一行后,其余代码应该可以正常工作。