Flask 渲染跨伺服器的html模板
阿新 • • 發佈:2019-01-07
從之前的文章中我們知道,Flask渲染html模板是通過render_template這個函式來進行讀取渲染的,預設讀取的路徑是在應用的templates資料夾,如果想讀取應用下其他資料夾的模板檔案,可以通過在藍圖下設定template_folder引數來控制讀取的模板路徑,但是,假如我們的模板檔案存放在一個ftp或者http伺服器上,該怎麼通過render_template來讀取到那個模板檔案,這就是今天本文要介紹的內容。
想要實現這個功能,就需要我們重寫一個jinja2讀取模板檔案的類,jinjia2這個模組負責讀取模板檔案的程式碼在loaders.py這個檔案中,我們將根據BaseLoader這個類建立一個支援讀取遠端模板的建構函式。
jinja loader
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)
在對應的藍圖中,設定jinja_loader為需要讀取的模板檔案的遠端目錄
@admin.route("/")
def index():
admin.jinja_loader = UrlLoader("你的模板路徑")
return render_template("index.html" )
這樣,就能讀取到遠端模板路徑下的index.html檔案了。