烧瓶 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 处理器的主要内容,如果未能解决你的问题,请参考以下文章