Frozen-Flask,在Jinja2中的url_for()和构建期间的字符串连接



当正常运行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打印。

最新更新