Переопределите url_for глобально, чтобы расширения также использовали его

Я пытаюсь переопределить 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?

0 ответов

Другие вопросы по тегам