我打算将django项目转换为Progressive Web App。我无法弄清楚在我的django项目中将service_worker.js和manifest.json文件放在何处。我尝试过以下方法:
的myproject /
|__app1
|__app2
|__manage.py
|__manifest.json
|__service_worker.js
然后尝试使用相对路径../../../service_worker.js从html文件注册服务工作者。那不行。它显示了这个错误:"在获取脚本时收到了错误的HTTP响应代码(404)。"
我尝试的另一种方法是将service_worker.js和manifest.json放在静态文件夹中:
的myproject /
|__app1/
|__static/
|__app1/
|__service_worker.js
|__manifest.json
|__app2
|__manage.py
并使用{%static' app1 / service_worker.js' %}。此方法的问题在于已注册的service_worker.js的范围仅限于该静态文件夹。我在一个stackoverflow回答中看到,我可以明确地将服务工作者的范围设置为{scope:' /'}。但是,我认为可能有一种我想念的更好的方法。如果有人有解决方案,请告诉我。
答案 0 :(得分:0)
看起来你想要为你的所有应用程序(1,2)使用通用软件。您可以在项目根目录中同时拥有SW和manifest.json,将清单链接到项目的主页。如果要缓存整个路径,设置范围并不是一个坏主意,因为officially documented here. 在链接页面中查找“注册您的工作人员”部分。
答案 1 :(得分:0)
Service Worker 需要从它将处理的相同路径提供服务,因此如果您放置在 static 之后,它将仅处理 static/,因此要放置在“/”下,您必须创建一个返回 Service Worker js 的视图。
def sw(request):
return HttpResponse(settings.SERVICE_WORKER)
注意:可以使用django模板生成最终的js
对于 Manifest,它是一个普通的静态文件。