2017-01-14 1 views
2

FlaskとJinja2でPythonを使用していますが、サイドバーを実装しようとしています。 HTMLページで私はこれを持っています:Flaskアプリケーションの複数のページでサーバーからデータを取得する

{% include "sidebar.html" %} 

私がサイドバーファイルで望むのは、最新のユーザーのブロックを持つことです。これを行うには、サーバーからsidebar.htmlファイルの結果を取得する必要があります。しかし、どこのコードをPythonファイルに書くべきですか?あなたはこの機能を実装することができ

答えて

1

方法は、Python側の神社変数を作成することである:

app = Flask(__name__) 

app.jinja_env.globals.update({ 
    'latest_users': get_latest_users() 
}) 

def get_latest_users() { 
    return ['Mark', 'Jane', 'Sally'] 
} 

変数latest_users今単に行うことによって、任意の神社テンプレートからアクセスすることができます。

{% for user in latest_users %} 
    <p>{{ user }}</p> 
{% endfor %} 
+0

私は複数の変数のためglobals.updateビットを複数回配置する必要がありますか? –

+0

'app.jinja_env.globals.update()'は辞書を引数として取ります。つまり、複数のキー値のペアを追加できます。 –

0

テンプレートに変数を渡すことができます。あなたはまだ、これはあまりにも一部含まに使用することができますincludeあなたの変数を使用する場合:

@app.route('/') 
def index(): 
    users = ['user1', 'user2'] 
    debug = False 
    render_template('index.html', users=users, debug=debug) 

# index.html 
{% include "sidebar.html" %} 

#sidebar.html 
{% for user in users %} 
    <p>{{ user }}</p> 
{% endfor %} 
{{debug}} 
+0

indexの変数は他のページのサイドバーでも機能しますか? –

+0

はい、代わりに 'index.html'の代わりに' render_template( 'other.html'、users = users、debug = debug) 'というHTMLファイルを書くべきです。ここで 'sidebar.html'を' other.html'に含めると、この変数 'users'、' debug' – metmirr

関連する問題