烧瓶 url 处理器

Posted

技术标签:

【中文标题】烧瓶 url 处理器【英文标题】:Flask url processors 【发布时间】: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'

你能给点建议吗?谢谢!

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于烧瓶 url 处理器的主要内容,如果未能解决你的问题,请参考以下文章

无法触发烧瓶不安分的后处理器

如何在具有多个蓝图的烧瓶中处理登录?

我想在底部的索引页面本身的烧瓶中处理联系表格[重复]

Python 多处理管理器在烧瓶 API 中使用时显示错误

在烧瓶404上添加自定义处理程序,500页

如何使用任务命中在 azure 批处理节点中运行的烧瓶应用程序?