3

我想将与我的蓝图关联并最初使用该蓝图注册的模板文件夹替换为我的 Flask 应用程序。我尝试了以下方法:

from flask import current_app as app

bp = Blueprint('myblueprint', __name__, template_folder='templates/en', url_prefix='/<lang_code>')

@bp.before_request
def verify_language():
    # check if there are any parameters in the url and get lang_code
    url_params = request.view_args
    lang = (url_params and url_params.pop('lang_code', None)) or None
    # if lang_code is given, make sure it is valid
    if lang in ['en', 'fi']:
        if lang == 'fi':
            app.blueprints["myblueprint"].template_folder = 'templates/fi'
        else:
            app.blueprints["myblueprint"].template_folder = 'templates/en'
        g.lang_code = lang
    else:
        return jsonify({"error": "Invalid Parameters (lang_code)"})

@bp.url_defaults
def add_language_code(endpoint, values):
    values.setdefault('lang_code', g.lang_code)

我在“templates/en”和“templates/fi”文件夹下有类似的名称相同的 .html 文件,但明显的例外是站点文本已被翻译成两种不同的语言。

当我进入我的网站时,这一次有效,但随后它停止工作。因此,一旦我进入我的网站并将 url-prefix lang_code 更改为“fi”,我就会看到我的芬兰网站,但在 url 中替换“en”不再显示英文网站。

我认为这与 Flask 将蓝图模板文件夹添加到应用程序的搜索路径,然后找到我在我的“X.html”中的第一个匹配项有关

return render_template('X.html')

有没有办法真正替换注册到应用程序的蓝图模板文件夹,即删除第一个,同时添加另一个?

4

0 回答 0