Django模板用本地图像替换模型返回的文本

Posted

技术标签:

【中文标题】Django模板用本地图像替换模型返回的文本【英文标题】:Django template replace text returned from model with local image 【发布时间】:2021-03-06 17:55:20 【问题描述】:

我有一个模型,我从中提取数据并将其添加到我页面上的表格中。我要返回一个特定字段,其中包含 64 个版本的 x 的组合。用相应的图像替换每个版本。

例如以B,BU,BB,1WR的格式返回数据。 x 有 64 个不同版本,可以任意组合排列。每个版本我都有对应的.png 文件,我正在尝试用图像替换文本。

我下面的代码仅在版本的单个实例时才有效,但是我也认为如果我为 64 个版本中的每一个都执行此操作将非常低效。如果有多个相同的版本,例如,它不起作用。 BB

有没有一种方法可以循环遍历每一个并用正确的图像替换它。

html

<td class="">
  % if "B" in card.colors %<img class="icon" src="% static 'img/symbology/B.png' %">% endif %
  % if "G" in card.colors %<img class="icon" src="% static 'img/symbology/G.png' %">% endif %
  % if "R" in card.colors %<img class="icon" src="% static 'img/symbology/R.png' %">% endif %
  % if "U" in card.colors %<img class="icon" src="% static 'img/symbology/U.png' %">% endif %
  % if "W" in card.colors %<img class="icon" src="% static 'img/symbology/W.png' %">% endif %
  ...
</td>

更新:

x有64个版本,例如1,2,3,4,5等。64个版本是单数。所以每个版本都有对应的img。

但是每个版本都可以任意组合。

例如:

如果返回的数据为R,则应替换为下图:

但如果返回的数据是RRR,则应替换为:

所以它会得到图像 3 次。

字符和大括号与图像的名称相对应。因此以上内容应替换为三个&lt;img class="icon" src="% static 'img/symbology/R.png' %"&gt;

这需要是动态的,因为模型返回了许多记录,并且返回的数据可以是 x 的任意组合

【问题讨论】:

【参考方案1】:

我不确定我是否完全理解您的问题,但您是否尝试循环浏览图像并将它们与图像 URL 的其余部分连接起来? 我会尝试类似:

% for combo in card.colors %
<img class="icon" src="% static 'img/symbology/ combo .png' %">
% endfor %

【讨论】:

我已经更新了问题,希望它更清楚。 所以说它返回 5,您希望该图像被渲染 5 次?以及模型究竟返回什么数据类型。是整数还是字符串? 所以如果它返回5,它将被5.png 图像替换。 postgres 中的数据类型为character varying[] 如果它返回 RRR 您希望图像渲染 3 次?这部分让我有点困惑,因为它返回一个字符串,并且您希望它根据返回的数据的长度/大小来呈现图像 正确。我认为这就是我遇到问题的原因,因为我需要拆分它,然后使用每个 x 来呈现正确的对应图像。【参考方案2】:

我设法解决了。

我首先遍历模型字段card.colors,它返回.png 文件所需的字符。

在这个循环中,然后我使用循环中的i 渲染图像。

<td class="">
  % for i in card.colors %
      <img class="icon" src="% static 'img/symbology/'|add:i|add:'.png' %">
  % endfor %
</td>

【讨论】:

以上是关于Django模板用本地图像替换模型返回的文本的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在 ajax 中返回模型表单集并在模板中使用

在 Django 中使用自定义用户模型总是在模板中返回匿名用户

Django 使用自定义 SQL 而不是模型将 JSON 对象返回到模板

Django学习系列之模板

Python Django 在脚本和图像上返回 400 条 GET 消息

django中模板页面如何实现字符串匹配替换 解决后提高悬赏