url_for
関数をグローバルにオーバーライドしようとしています。ブラウザの最大同時接続制限を克服するために、複数の URL からアセットをロードできるように、これを行いたいと考えています。
テンプレートで独自の関数を代用app.context_processor
していましたが、Flask-Assets で使用すると機能しません。
STATIC_URLS = [
static.1.domain.com,
static.2.domain.com,
static.3.domain.com
]
@app.context_processor
def override_url_for():
return dict(url_for=static_urls)
def static_urls(endpoint, **values):
if endpoint == 'static':
filename = values.get('filename', None)
static_urls = app.config.get('STATIC_URLS', None)
if filename and static_urls:
hashed = int(hashlib.md5(filename.encode()).hexdigest(), 16)
index = hashed % len(static_urls) - 1
url = static_urls[index]
url = app.url_map.bind(url)
return url.build(endpoint, values=values, force_external=True)
return url_for(endpoint, **values)
テンプレートでは、url_for
正しく機能しますが、ASSET_URL
機能しません。
{{ url_for('static', filename='style.css') }}
http://static.1.domain.com/static/style.css
{% assets 'style' %}
<link href="{{ ASSET_URL }}" rel="stylesheet" media="screen">
{% endassets %}
http://domain.com/static/style.css
Flask-Assets のような拡張機能でこれを機能させるにはどうすればよいですか?