正常运行 Flask 时,下面描述的一切都工作得很好。 然而,当在 Frozen-Flask 中运行构建时,我遇到了以下问题:
在我的 Jinja2 模板中,我首先尝试了这个,我必须从多个来源创建许多
url_for()
函数的路由字符串:
{% macro my_macro(foo) %}
<a href="{{ url_for('index_' ~ foo) }}">Link text</a>
{% endmacro %}
虽然这在 Flask 中运行良好,但当我使用 Frozen-Flask 进行构建时,出现以下错误:
werkzeug.routing.BuildError: Could not build url for endpoint 'index_'. Did you mean...
如您所见,缺少
foo
的值。
所以我认为这很烦人,但也许
'index_' ~ foo
的字符串连接发生在解析 url_for()
之后。所以为了测试我的理论,我尝试了这个:
{% macro my_macro(foo) %}
{% set route = 'index_' ~ foo %}
<a href="{{ url_for(route) }}">Link text</a>
{% endmacro %}
但我得到了完全相同的错误。确切地。因此,就好像在将
set route
变量的值连接到 foo
的末尾之前设置 'index_'
的值,并将该不完整的值传递给 url_for()
。
但是,如果我用
foo
替换 'foo'
(所以现在 foo 是一个字符串而不是变量),那么串联就可以正常工作。所以我无法在 Frozen-Flask 中将字符串与字符串变量连接起来?
有什么办法可以解决这个问题吗?或者这可能是 Frozen-Flask 中的一个错误吗?
更新:这似乎是来自
routes.py
(我有 return render_template('my_template.html', foo='bar')
)的数据的问题。这个 foo
变量,虽然它被传递到基本模板,然后又被传递到宏(可以输出它以证明数据存在且正确),但该数据似乎不能用于动态创建供 url_for() 使用的路由。
我认为简单的行代码会对您有所帮助
<a href="{{url_for('user')}}/{{foo}}">Link Text</a>
仅将 foo 视为字符串进行连接,不使用 string1+strin2,仅使用 html 打印。
这已经很旧了,但可能仍然有用。这篇文章没有指定您使用哪些多个源来组成路由字符串。可能的解决方案是
在源头有一个 JSON 类型的路由定义,然后通过键定义路由,如
url_for(index_.foo)
如果在视图蓝图中指定了路由,如
@blueprint.route('/index_/<bar>')
def index_(bar)
使用
url_for('index_', bar = 'foo')
或
url_for('index_', filename = bar~foo)
路径 bar
和 foo
在别处定义我希望这有帮助。