当正常运行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 %}
但是我得到了完全相同的错误。完全正确。因此,就好像它在将foo
变量的值连接到'index_'
的末尾之前设置了set route
的值,然后将这个不完整的值传递给url_for()
。
然而,如果我用foo
代替'foo'
(所以现在foo是字符串而不是变量),那么连接工作得很好。所以我不能连接字符串与字符串变量在冷冻瓶?
是否有办法解决这个问题,或者这可能是一个可能的bug在冷冻瓶?
更新:这似乎是来自routes.py
的数据问题,我有return render_template('my_template.html', foo='bar')
。这个foo
变量,虽然它被传递到基本模板,然后它被传递到宏(它可以被输出来证明数据的存在和正确),但这个数据似乎不能被用来动态地创建一个路由供url_for()使用。
我想会帮助你一个简单的行代码
<a href="{{url_for('user')}}/{{foo}}">Link Text</a>
只考虑foo作为字符串将被连接,而不是string1+ string2,只使用HTML打印。