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

无需Ajax,能否在Django HTML模板中通过JS调用音频?

解决Django中音频播放功能失效的问题

当然可以不用Ajax解决,核心问题是你在JS里直接写了音频文件名,没按Django静态文件的规则生成正确路径——浏览器找不到音频文件,自然播放失败。其他静态文件(JS、CSS)正常是因为你可能用了{% static %}标签加载,但音频路径没处理。

具体修复步骤:

  1. 在模板中传递静态文件根路径给JS
    在你的Django模板HTML的<head>标签里,添加一段脚本,把静态文件的根路径暴露给全局JS:

    <script>
      // 定义全局变量,存储Django静态文件根路径
      const staticBaseUrl = "{% static '' %}";
    </script>
    

    注意要确保这段代码在你的音频JS文件之前加载,这样JS才能拿到这个变量。

  2. 修正JS中的音频文件路径
    把你JS里的Audio实例路径,改成拼接静态根路径的形式,指向/static/hangman_game/下的文件:

    // 修正音频路径
    var yes = new Audio(staticBaseUrl + "hangman_game/yes.wav");
    var no = new Audio(staticBaseUrl + "hangman_game/no.wav");
    
    var myAudio = new Audio(staticBaseUrl + "hangman_game/John Jacob Niles - The Maid Freed From The Gallows (1940).mp3");
    
    // 给isPlaying加初始值,否则togglePlay会报错
    let isPlaying = false;
    
    function togglePlay() {
      if (isPlaying) {
        myAudio.pause()
      } else {
        myAudio.play();
      }
    };
    myAudio.onplaying = function() {
      isPlaying = true;
    };
    myAudio.onpause = function() {
      isPlaying = false;
    };
    
    function checkIt(num)
    {
        var matched = false;
    
        for (i=0; i<lengthPass; i++)
        {
            if(pass.charAt(i) == letters[num])
            {
                pass1 = pass1.setCharacter(i, letters[num]);
                matched = true;
            }
        }
        if(matched == true)
        {
            yes.play();
            var element = "let" + num;
            // 注意:原代码多次重复设置style.background无效,应分开设置属性
            document.getElementById(element).style.backgroundColor = "#00C000";
            document.getElementById(element).style.border = "3px solid #00C000";
            updatePass();
        }
        else
        {
            no.play();
        }
    }
    
  3. 额外检查项

    • 确认模板顶部已经加载{% load static %}标签;
    • 检查音频文件名的大小写——Django静态文件路径区分大小写,确保JS里的文件名和服务器上的完全一致;

内容的提问来源于stack exchange,提问作者Paweł Pedryc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:07:35