呈现存储在 FTP 服务器上的 Jinja 模板
Render a Jinja template stored on an FTP server
我在 FTP 服务器上有一些模板,而我的应用程序在另一台服务器上 运行。我可以使用 render_template
在 FTP link 处呈现模板吗?
是的,可以对另一台服务器上的模板文件使用 render_template()
功能。创建一个从 link 获取远程模板的 loader。在此示例中,我使用 HTTP 服务器,但您可以通过更改传递给 UrlLoader 构造函数的 URL 使用 FTP 服务器。
from flask import Flask, render_template
from jinja2 import BaseLoader, TemplateNotFound
from urllib import urlopen
from urlparse import urljoin
class UrlLoader(BaseLoader):
def __init__(self, url_prefix):
self.url_prefix = url_prefix
def get_source(self, environment, template):
url = urljoin(self.url_prefix, template)
try:
t = urlopen(url)
if t.getcode() is None or t.getcode() == 200:
return t.read().decode('utf-8'), None, None
except IOError:
pass
raise TemplateNotFound(template)
app = Flask(__name__)
app.jinja_loader = UrlLoader('http://localhost:8000/')
@app.route('/')
def root():
return render_template('hello.html')
if __name__ == "__main__":
app.run(debug=True)
我在 FTP 服务器上有一些模板,而我的应用程序在另一台服务器上 运行。我可以使用 render_template
在 FTP link 处呈现模板吗?
是的,可以对另一台服务器上的模板文件使用 render_template()
功能。创建一个从 link 获取远程模板的 loader。在此示例中,我使用 HTTP 服务器,但您可以通过更改传递给 UrlLoader 构造函数的 URL 使用 FTP 服务器。
from flask import Flask, render_template
from jinja2 import BaseLoader, TemplateNotFound
from urllib import urlopen
from urlparse import urljoin
class UrlLoader(BaseLoader):
def __init__(self, url_prefix):
self.url_prefix = url_prefix
def get_source(self, environment, template):
url = urljoin(self.url_prefix, template)
try:
t = urlopen(url)
if t.getcode() is None or t.getcode() == 200:
return t.read().decode('utf-8'), None, None
except IOError:
pass
raise TemplateNotFound(template)
app = Flask(__name__)
app.jinja_loader = UrlLoader('http://localhost:8000/')
@app.route('/')
def root():
return render_template('hello.html')
if __name__ == "__main__":
app.run(debug=True)