You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

oTree:如何根据变量值条件显示对应jpg图片

oTree根据条件变量动态加载图片的解决方案

错误原因说明

  • 第一种方案报错是因为oTree(底层为Django模板引擎)不支持在{% static %}标签的参数中嵌套{{ }}模板变量,语法解析失败才会抛出参数数量错误。
  • 第二种方案失效是因为{{ static }}是后端模板渲染阶段执行的标签,渲染时会直接把参数当成静态资源路径字符串处理,而JavaScript是页面发送到前端后才执行,后端渲染时根本识别不到前端定义的imageshown变量,导致路径直接写死为imageshown。

可行实现方案

方案1:模板路径拼接(最简便,无需JS)

使用模板的add过滤器拼接路径,直接在后端完成渲染,代码如下:

{% with img_path="folder/"|add:player.condition_var|add:".jpg" %}
<img src="{% static img_path %}" alt="条件展示图">
{% endwith %}

方案2:模板条件判断(适配路径不规律场景)

如果后续图片路径规则可能变动,直接用模板分支判断更易维护:

{% if player.condition_var == 1 %}
<img src="{% static 'folder/1.jpg' %}" alt="条件展示图">
{% elif player.condition_var == 2 %}
<img src="{% static 'folder/2.jpg' %}" alt="条件展示图">
{% else %}
<img src="{% static 'folder/3.jpg' %}" alt="条件展示图">
{% endif %}

方案3:前端JS动态赋值(需要JS交互的场景)

如果必须用JS实现,需要先把后端变量和静态资源根路径提前渲染到前端,再动态给图片赋值src:

<!-- 先定义带id的img标签 -->
<img id="dynamic-img" alt="条件展示图">

{{ block app_scripts }}
<script>
// 后端渲染时直接把变量值输出到JS代码中
const condition = {{ player.condition_var }};
// 提前拿到静态资源根路径
const staticRoot = "{% static '' %}";
// 拼接完整路径赋值给img
document.getElementById('dynamic-img').src = staticRoot + "folder/" + condition + ".jpg";
</script>
{{ endblock }}

内容的提问来源于stack exchange,提问作者tanja94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:00:05