首页 > 解决方案 > 使用多个顶级域时烧瓶 host_matching 和静态文件

问题描述

所以我有两个域:

MAIN_DOMAIN = www.example.com
DUTCH_DOMAIN = www.voorbeeld.com

我想使用带有 Flask-Babel 的荷兰域来支持 i18n。

为了使这成为可能,我正在使用这样的 host_matching:

def create_app(config_class=Config):
    app = Flask(__name__, host_matching=True,
                static_host=MAIN_DOMAIN)

最后,路由:

@bp.route('/', host=MAIN_DOMAIN)
@bp.route('/', host=DUTCH_DOMAIN)
def index():
    return render_template('index.html')

我将来可能想更改路由部分。但现在这工作正常。

现在解决问题,当我导航到荷兰域时,一切正常,除了我收到许多 404 错误消息,因为它找不到静态文件。如果我将静态文件的 url 更改为 MAIN_DOMAIN 它工作正常。这是有道理的,因为 static_host 设置为 MAIN_DOMAIN。

所以我似乎无法找到解决这个问题的方法。有没有办法让静态文件的两个域都工作?或者你会如何解决这个问题?

标签: pythonpython-3.xflask

解决方案


好的。所以我已经弄清楚了,实际上注意到了一些有趣的行为。

所以当我去主域时。url_for 按预期工作,所以如果你想在你的模板中做这样的事情:

<script src="{{ url_for('static', filename='jquery/dist/jquery.min.js') }}"></script>

结果将是这样的:

<script src="/static/jquery/dist/jquery.min.js"></script>

但是,当我去 DUTCH_DOMAIN 路线时,我得到:

<script src="http://www.example.com/static/jquery/dist/jquery.min.js"></script>

因此,您不必为其他域手动将 _external=True 添加到 url_for ,但这一切都会自动发生。它之前不起作用的原因是 CORS,因为从浏览器的角度来看,您正在从不同的域而不是从“本地”网站加载资产。

希望这可以帮助。


推荐阅读