python - 使用多个顶级域时烧瓶 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。
所以我似乎无法找到解决这个问题的方法。有没有办法让静态文件的两个域都工作?或者你会如何解决这个问题?
解决方案
好的。所以我已经弄清楚了,实际上注意到了一些有趣的行为。
所以当我去主域时。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,因为从浏览器的角度来看,您正在从不同的域而不是从“本地”网站加载资产。
希望这可以帮助。
推荐阅读
- java - Scanner.read() 不拾取分隔符的间歇性错误
- c# - 我对统一的 fov 可视化脚本有疑问
- python - paho-mqtt python包中的连接被拒绝错误
- ruby - Ruby:通过 TCP 套接字发送字符串
- php - 在信用卡支付中使用 Stripe
- swift - 为什么我不能执行鼠标左键单击?
- objective-c - 将(Swift WatchKit)目标添加到(Objective-C iOS)应用程序
- php - Laravel:用户登录后抛出 MethodNotAllowedHttpException
- python - 需要将pandas相关高亮表(cmap Matplotlib)保存为png图片
- vim - 调用 vim 插件命令 :Foo 会自动重绘!之后(即执行 :Foo | redraw!)