gpt4 book ai didi

python - 同一蓝图中允许多个子域

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:21 25 4
gpt4 key购买 nike

我需要在此蓝图中允许两个子域。在这种情况下,pt 和 br。我怎样才能做到这一点?据我所知,我只能有一个子域参数。我想对两种语言 [pt 和 br] 使用此功能。

mod = Blueprint('landing', __name__, url_prefix='/', subdomain='pt')

@mod.route('/', methods=['GET'])
def index():
pass

我想避免 dynamic子域,因为我不想更改我所有的 url_for()

最佳答案

不要在当前定义蓝图的前缀和子域,像这样定义它:

mod = Blueprint('landing', __name__)

然后,简单地注册蓝图两次,每个子域一次:

app.register_blueprint(mod, subdomain='pt', url_prefix='/')
app.register_blueprint(mod, subdomain='br', url_prefix='/')

编辑:

如 OP 所述,给定解决方案的问题在于,在模板中使用 url_for 时,第一个注册的蓝图将优先。

一个快速的解决方法是在注册时做这样的事情:

app.register_blueprint(mod, subdomain='br')
mod.name = 'landing_pt'
app.register_blueprint(mod, subdomain='pt')

请注意,完成此操作的顺序很重要(先注册一个,然后更改名称,然后再注册另一个)。

然后,要使 url_for 在两个子域中都按预期工作,使用 relative redirects 很重要像 url_for('.index') 而不是 url_for('landing.index')

通过更改第二次注册的蓝图名称,我们让 Flask 认为这是一个不同的蓝图。

欢迎提出建议以改进这种肮脏的解决方法。

关于python - 同一蓝图中允许多个子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40814549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com