如何在 Django 中提供 WASM 文件

Posted

技术标签:

【中文标题】如何在 Django 中提供 WASM 文件【英文标题】:How to serve WASM files in Django 【发布时间】:2021-10-15 14:16:07 【问题描述】:

我使用以下方法将我的 C 文件编译为 wasm:

emcc main.c -s USE_SDL=2 -O3 -s WASM=1 -o main.js

我只使用 WASM 来操作画布。除了“胶水”的js代码,没有其他的js代码。

我现在有一个包含这些文件的目录(在 Django 之外,就在我的 Documents 文件夹中):

- home.hml
- main.c
- main.js
- main.wasm

我可以使用任何网络服务器提供服务,例如

python3 -m http.server 8000 --bind 127.0.0.1 

并在浏览器中查看动画。它有效。到目前为止没有问题。

我现在想从 Django 提供 home.html。我的 URLs.py 有:

    path('', views.home, name='home'),

views.py 有:

def home(request):
    context = 
    return render(request, 'app/home.html', context)

我已将 home.html 复制到app/templates/app

然后我将 main.js 复制到 app/static/app

然后我修改了home.html来替换:

    <script src="main.js"></script>

<script src="% static 'app/main.js' %" type="text/javascript"></script>

我不知道如何处理 main.wasm。这也应该进入静态文件夹还是项目根目录?我需要为此在某处添加显式导入吗?我怎样才能让 home.html 的行为与使用简单的 httpserver 时的行为相同,但在由 Django 提供服务时?

请注意,除了画布之外,home.html 中的所有 DOM 元素都可以正确显示。所以我比较确定一切都设置正确,除了 main.wasm 不可访问。

【问题讨论】:

@pts 成功了,谢谢!网络选项卡显示它正在查看 /app/static/main.wasm 我把它放在静态文件夹中并且它工作。 【参考方案1】:

在浏览器开发者工具的“网络”选项卡中检查浏览器发出的 HTTP 请求。可能是 URL 中的路径错误,或者 Django 返回的 Content-Type 不正确。

【讨论】:

以上是关于如何在 Django 中提供 WASM 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地加载 wasm 模块?

如何满足对 wasm 的严格 mime 类型检查?

如何在 JS 文件中使用导出的结构?

如何减小 dotnet.wasm 的大小

如何在 NEAR 协议中构建和部署多个合约

如何在 django 中提供可下载的 zip 文件