如何在 django 模板的 for 循环中加载图像?

Posted

技术标签:

【中文标题】如何在 django 模板的 for 循环中加载图像?【英文标题】:How to load images in a for loop in django template? 【发布时间】:2020-01-23 06:42:54 【问题描述】:

对于名称生成器,我想显示字母表(如可点击的图像)以过滤初始值,但在 for 循环中加载图像时遇到问题。

这里有两个暂定在我的.html

  % for letter in initials %
    <a href="#" onclick="FilterByInitial()"><img width='32' height='32' src="% static 'lists/icons/ letter _grey.ico' %" alt=' letter ' /></a>

    % with letter|add:'_grey.ico' as myimage %
      <a href="#" onclick="FilterByInitial()"><img width='32' height='32' src="% static 'lists/icons/myimage' %" alt=' letter ' /></a>
    % endwith %
  % endfor %

其中 initials 是一个包含所有字母的字符串:

initials = ascii_lowercase

我的 Firefox 中的网络选项卡给出了 myimage letter _grey.ico 未找到。该页面显示替换文本。这有效:

src="% static 'lists/icons/a_grey.ico' %"

我什至尝试添加|safe,但无济于事

【问题讨论】:

【参考方案1】:

您的方法不起作用,因为未评估字符串中的模板变量。

试试这个:

% with 'lists/icons/'|add:letter|add:'_grey.ico' as myimage %
  <a href="#" onclick="FilterByInitial()">
    <img width='32' height='32' src="% static myimage %" alt=' letter ' />
  </a>
% endwith %

或者,您可以创建一个自定义过滤器,如下所示:

# templatetags/image_tags.py
@register.filter
def image_for_letter(letter):
    return f'lists/icons/letter_grey.ico'


% load image_tags %
...
  <a href="#" onclick="FilterByInitial()">
    <img width='32' height='32' src="% static letter|image_for_letter %" alt=' letter ' />
  </a>
% endwith %

【讨论】:

以上是关于如何在 django 模板的 for 循环中加载图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中从 for 循环中转义一行

如何在Django模板的内部for循环中使用外部for循环值

如何在 Django 模板中使用这个 for 循环? [关闭]

如何使用引导程序和 for 循环在 django 中创建电影片段?

Django模板中的for循环

如何在 django 模板的单个表体中添加两个 for 循环