2016-04-04 4 views
2

FTPサーバー上にいくつかのテンプレートがあり、私のアプリケーションは別のサーバー上で実行されています。 render_templateを使用して、FTPリンクでテンプレートをレンダリングすることはできますか?FTPサーバーに保存されているJinjaテンプレートをレンダリングする

+0

: 'render_template(「FTPファイルリンク」)' 私はたぶん私はFTPファイルの内容を読み取ることができることを見つけようと、私はそれが良い方法ではないと思います。 私はrender_templateに関するドキュメントを読んだことがありますが、これを行う方法はないようですが、この問題を解決する方法はありますか? ありがとう –

答えて

3

はい、render_template()の機能を別のサーバーのテンプレートファイルに使用できます。リンクからリモートテンプレートを取得する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) 
+0

ありがとうございます! –

+0

この方法ではいくつかの問題があります。私のファイルと私のURLが本当に存在し、何が間違っているのかわからないときは404エラーになります。どの方向に私がこの問題を解決する方法を見つけることができるかを教えてください。どうもありがとう。 –

関連する問題