Frozen-Flask、Jinja2 中的 url_for() 以及构建过程中的字符串连接

问题描述 投票:0回答:2

正常运行 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() 使用的路由。

flask jinja2 flask-frozen
2个回答
0
投票

我认为简单的行代码会对您有所帮助

      <a href="{{url_for('user')}}/{{foo}}">Link Text</a>

仅将 foo 视为字符串进行连接,不使用 string1+strin2,仅使用 html 打印。


0
投票

这已经很旧了,但可能仍然有用。这篇文章没有指定您使用哪些多个源来组成路由字符串。可能的解决方案是

  1. 在源头有一个 JSON 类型的路由定义,然后通过键定义路由,如

    url_for(index_.foo)

  2. 如果在视图蓝图中指定了路由,如

@blueprint.route('/index_/<bar>')
def index_(bar)

使用

url_for('index_', bar = 'foo')

  1. 如果源是文件,请使用
    url_for('index_', filename = bar~foo)
    路径
    bar
    foo
    在别处定义

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.