如何在Flask的Jinja2模板中使用url_for拼接变量?
Flask模板中url_for拼接变量的正确方式
你当前的写法问题在于:Jinja2模板不会解析字符串里的{userid}这种Python f-string语法,这些会被当作普通字符输出,导致生成的URL路径不正确。下面是三种可行的解决方法:
方法1:使用Jinja2字符串拼接符~
Jinja2中用~来连接字符串和变量,这是模板里最直观的拼接方式:
{% set userid=post.author.id %} {% set mediafile=post.media %} {% set path = url_for('static', filename='post_media/' ~ userid ~ '/' ~ mediafile) %} <div> <img style="height: 100%; width:100%;" class="article-img" src="{{ path }}"> </div>
方法2:使用format过滤器
和Python的str.format()用法一致,适合需要更复杂格式化的场景:
{% set userid=post.author.id %} {% set mediafile=post.media %} {% set path = url_for('static', filename='post_media/{0}/{1}'.format(userid, mediafile)) %} <div> <img style="height: 100%; width:100%;" class="article-img" src="{{ path }}"> </div>
方法3:使用Jinja2的f-string风格(Jinja2 2.10+支持)
如果你习惯Python的f-string写法,Jinja2 2.10及以上版本也支持这种简洁的语法:
{% set userid=post.author.id %} {% set mediafile=post.media %} {% set path = url_for('static', filename=f'post_media/{userid}/{mediafile}') %} <div> <img style="height: 100%; width:100%;" class="article-img" src="{{ path }}"> </div>
以上三种方法都能正确将userid和mediafile变量的值插入到静态文件路径中,生成符合预期的URL。
内容的提问来源于stack exchange,提问作者zircon
相关产品推荐
相关产品推荐

