0

您好,很高兴与您打招呼,今天我来向您寻求 Babel de Flask 向我提出的错误的帮助,我是该主题的新手,但在此先感谢您的合作。

在代码的末尾,我在 Quote 中显示了错误消息。

接下来是使用的代码。

我添加了init .py

import os
from flask import Flask, request
from werkzeug.datastructures import ImmutableDict
import flask_babel as babel
from flask_babel import gettext as _

b = babel.Babel()
app = Flask(__name__, instance_relative_config=True)
b.init_app(app)

@babel.localeselector
    def get_locale():
        # if the user has set up the language manually it will be stored in the session,
        # so we use the locale from the user settings
        try:
            language = session['language']
        except KeyError:
            language = None
        if language is not None:
            return language
        return request.accept_languages.best_match(passbyte.config['LANGUAGES'].keys())

@app.route('/language/<language>')
def set_language(language=None):
    session['language'] = language
    return redirect(url_for('home'))
            
@app.context_processor
def inject_conf_var():
    return dict(AVAILABLE_LANGUAGES=app.config['LANGUAGES'], CURRENT_LANGUAGE=session.get('language',request.accept_languages.best_match(app.config['LANGUAGES'].keys())))

我的 > config.py

# -*- coding: utf-8 -*-
# ...
# available languages
LANGUAGES = {
    'en': 'English',
    'es': 'Español'
}

我的 base.html

            {% for language in AVAILABLE_LANGUAGES.items() %}
            {% if CURRENT_LANGUAGE == language[0] or (CURRENT_LANGUAGE == '' and BEST_MATCH_LANGUAGE == language[0]) %}
              <li class="lang_active"><a name="language">{{ language[1] }}</a></li>
            {% else %}
              <li class="lang_inactive"><a href="?lang={{ language[0] }}">{{ language[1] }}</a></li>
            {%  endif %}
            {% endfor %}

错误

jinja2.exceptions.UndefinedError: 'AVAILABLE_LANGUAGES' 未定义

我在这里看到我的代码

4

1 回答 1

1

@babel.localselector应该是@b.localselector

说明:你app从 中创建了一个对象Flask(),装饰器appFlask直接使用该对象,那么你应该对 babel 做同样的事情。你创建了一个b(babel 对象),所以使用它。

您似乎也没有加载配置。然后, app.config[*] 可能会返回None. 所以你需要在某处加载它:

app = Flask(__name__, instance_relative_config=True)
app.config.from_object('yourapplication.default_settings')
# or
app.config.from_pyfile('application.cfg', silent=True)

根据您的情况查看官方文档以获取更多详细信息:配置处理

于 2020-08-07T20:56:09.910 回答