Flask Jinja 宏在 url_for 中的变量

3
我有一个Flask应用程序,其中包含一个类似于以下内容的Jinja宏:
{% macro icon(site, title="") %}
    <img src="{{ url_for('static', filename="icons/XXX.png") }}" alt="{{ title }}" class="img-icon">
{% endmacro %}

我需要做的是让文件名等于传递给宏的site变量。因此,它应该具有site的值,而不是XXX。
有没有办法这样做?
2个回答

9
这应该可以工作:
{% macro icon(site, title="") %}
    <img src="{{ url_for('static', filename='icons/%s.png' % site) }}" alt="{{ title }}" class="img-icon">
{% endmacro %}

谢谢!它正在工作,但由于某种原因,site的值前面有很多空格。URL看起来像icons/ google.png而不是icons/google.png,当然会去掉site。你有什么想法吗? - applechief
4
对于jinja和flask我不确定,但在Python中建议使用'icons/{}.png'.format(site)代替'icons/%s.png' % site。 :) - Aprillion
@deathApril,你应该单独回答,因为它比旧的%样式更正确。 - Rebs

6
自 Python 2.6 起,推荐使用 str.format() 进行字符串格式化,详情参见 pep-3101。请注意,保留 HTML 标签,不涉及解释。
{% macro icon(site, title="") %}
    <img src="{{ url_for('static', filename='icons/{0}.png'.format(site)) }}" alt="{{ title }}" class="img-icon">
{% endmacro %}

1
对于Python 3.6+,还可以使用f-strings:f'icons/{site}.png' - Aprillion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接