将服务工作者和清单放在django项目中的位置?

时间:2018-04-04 06:04:55

标签: django progressive-web-apps

我打算将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:' /'}。但是,我认为可能有一种我想念的更好的方法。如果有人有解决方案,请告诉我。

2 个答案:

答案 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,它是一个普通的静态文件。