【问题标题】:How do I fix an endpoint error with flask blueprints如何使用烧瓶蓝图修复端点错误
【发布时间】:2017-01-03 20:17:06
【问题描述】:

我正在学习带有蓝图的烧瓶,我有以下代码示例:

from flask import Flask, render_template, Blueprint, g

bp = Blueprint('language', __name__, url_prefix='/<int:language_id>', static_folder='static')
app = Flask(__name__)


@bp.url_defaults
def add_language_id(endpoint, values):
    if 'language_id' in g:
        values.setdefault('language_id', g.site_id)
    else:
        g.language_id = 1  # English


@bp.url_value_preprocessor
def pull_language_id(endpoint, values):
    g.language_id = values.pop('language_id')


@bp.route('/')
def index():
    return render_template('main.html')


@bp.route('/lang')
def language():
    return render_template('lang.html')

app.register_blueprint(bp)

if __name__ == '__main__':
    app.run()

但是我收到了这个错误:

werkzeug.routing.BuildError: 无法为端点构建 url 具有值 ['language_id'] 的“语言”。你的意思是'language.index' 代替?

这是 HTML 代码:

<ul>
    <li>
        <a href="{{ url_for('language', language_id=1) }}">English</a>
    </li>
</ul>

如何纠正这个错误?

【问题讨论】:

  • 我注意到你是社区的新手,这是你关于这个主题的第三个问题(到目前为止)。我强烈建议您阅读烧瓶和 python 的文档。

标签: python flask


【解决方案1】:

您的 url 链接中似乎缺少蓝图名称 (language):

从这里开始:

bp = Blueprint('language', __name__, url_prefix='/<int:language_id>', static_folder='static')

所以你的链接需要附加:

<a href="{{ url_for('language.language', language_id=1) }}">English</a>

我还建议将其命名为不同的名称,以免与您可能拥有的任何其他命名约定冲突。

【讨论】:

  • 你说我叫它不同。我可以给它取什么名字?
  • @TychkinNikitovich 只要有意义,您就可以随心所欲地制作它。我只是想避免潜在的命名冲突。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2012-06-16
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多