【问题标题】:Flask url processors烧瓶 url 处理器
【发布时间】:2020-07-04 09:41:04
【问题描述】:

我正在为两种语言构建烧瓶网络应用程序。 我读了https://flask.palletsprojects.com/en/1.1.x/patterns/urlprocessors/#internationalized-application-urls

 from flask import Flask, g

app = Flask(__name__)

@app.url_defaults
def add_language_code(endpoint, values):
    if 'lang_code' in values or not g.lang_code:
        return
    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
        values['lang_code'] = g.lang_code

@app.url_value_preprocessor
def pull_lang_code(endpoint, values):
    g.lang_code = values.pop('lang_code', None)

@app.route('/<lang_code>/')
def index():
    ...

@app.route('/<lang_code>/about')
def about():
    ...

但是,我无法理解“价值观”的确切含义。 我也运行了代码,但它给出了以下错误。

g.lang_code = values.pop('lang_code', None)

AttributeError: 'NoneType' 对象没有属性 'pop'

你能给点建议吗?谢谢!

【问题讨论】:

    标签: url flask routes internationalization


    【解决方案1】:

    我正在学习与您相同的教程,发现使用斜杠(例如 example.com/en/)可以正常工作,但是在尝试加载路由而不输入斜杠时出现 AttributeError: 'NoneType' object has no attribute 'pop' 错误我的浏览器(例如example.com/en)。

    默认情况下,Flask 无论如何都会将非尾部斜杠 URL 重定向到尾部斜杠,所以我只是通过添加最低限度来解决这个问题以避免错误:

    @app.url_value_preprocessor
    def pull_lang_code(endpoint, values):
        if values is None:
            values = {}
        g.lang_code = values.pop('lang_code', None)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多