2012-07-29 11 views
6

私のアプリは、同じ静的ファイルセットを使用するルートがたくさんあります。毎回フラスコ内の静的ファイルのURLを再定義しないでください

私はこのようなすべてのルートのためにそれらを定義する必要があります。

return render_template("person.html", 
         css_main=css_main, 
         css_reset=css_reset, 
         css_fonts=css_fonts, 
         js_jquery=js_jquery, 
         js_main=js_main) 

私はフラスコとPythonに新たなんだ。私は、それはこのようになりますテンプレートをレンダリングするとき、

css_reset = url_for("static", filename="reset.css") 
css_main = url_for("static", filename="main.css") 
css_fonts = url_for("static", filename="fonts.css") 

js_jquery = url_for("static", filename="jquery-1.7.2.min.js") 
js_main = url_for("static", filename="main.js") 

そして、私がやっていることはちょっとばかげていると思います。 1つの場所でそれらを定義し、すべてのルート定義をコピーして貼り付けなくても、テンプレートで使用できますか?

答えて

12

最も簡単な方法は、Flask-Assets拡張子を使用することです。テンプレートで

from flask.ext.assets import Environment, Bundle 
    assets = Environment(app) 
    css_all = Bundle('reset.css','main.css','fonts.css') 
    assets.register('css_all',css_all) 

{% assets %} 
    <link rel="stylesheet" href="{{ ASSET_URL }}"> 
    {% endassets %} 

ます。また、この拡張機能の特定のオプションを使用することにより、生産のためのCSSやJSファイルを圧縮することができます。

これらのファイルは多くのテンプレートで使用する必要があるため、base.htmlテンプレートで定義し、すべてのテンプレートでbase.htmlを拡張します。あなたはそれらを何度も何度も書く必要はありません。

+0

[リンクはここに移動](http://flask-assets.readthedocs.org/en/latest/) – Belrog

-1

あなたはそうする必要はありません。url_forはURLを生成するためのものです(URLの構造を変更すると、12回変更する必要はありません)。代わりに静的ファイルへの固定パスをテンプレート内で直接使用することができます。ただ、/静的フォルダに静的ファイルを入れて、あなたのテンプレートでそれを使用します。代わりに、直接あなたのサイトのURLとYOUR_SITE_URLを置き換えるので

<link rel="stylesheet" href="{{ YOUR_SITE_URL_HERE+'/static/main.css' }}"> 

、あなたはあなたのconfig.pyで変数を定義したいとあなたにそれを使用する場合がありますテンプレート:代わりにテンプレートを使用すると、神社でグローバルとして登録することができますたびに、これらの変数を渡すの{{ config['SITE_URL']+'/static/main.css' }}

+2

これを 'href =" {{url_for( 'static'、filename = 'main.css')}} 'と書いてみるとどうでしょうか? – codecool

+1

その早すぎる最適化は最高です。それは大したことではありません。 – codecool

+0

同じサイトを複数のURLから配信することが可能です。もう1つは、静的ファイルをホストしているパスが変更された場合です。たとえば、それらをAmazon S3に移動しますか?私はSimon Sapinと上記のcodecoolの両方に同意します。 Flask-Assetsを使用するか、資産がホストされている場所に応じてJinjaヘルパーを定義します。 –

16

いっそ
app.jinja_env.globals.update(
    css_reset=url_for("static", filename="reset.css"), 
    css_main=url_for("static", filename="main.css"), 
    ... 
) 

または、ヘルパー関数を登録します。

あなたのテンプレートで
app.jinja_env.globals['static'] = (
    lambda filename: url_for('static', filename=filename)) 

そして:

<link ref=stylesheet href="{{ static('main.css') }}"> 
関連する問題