在 django 项目中将 service worker 和 manifest 放在哪里?
Posted
技术标签:
【中文标题】在 django 项目中将 service worker 和 manifest 放在哪里?【英文标题】:Where to put service worker and manifest in a django project? 【发布时间】:2018-09-13 14:18:33 【问题描述】:我计划将 django 项目转换为 Progressive Web App。我无法弄清楚在我的 django 项目中将 service_worker.js 和 manifest.json 文件放在哪里。我尝试了以下方法:
我的项目/
|__app1
|__app2
|__manage.py
|__manifest.json
|__service_worker.js
然后尝试使用相对路径 ../../../service_worker.js 从 html 文件注册 service worker。那没有用。它显示此错误:“获取脚本时收到错误的 HTTP 响应代码 (404)。”
我尝试的另一种方法是将 service_worker.js 和 manifest.json 放在静态文件夹中:
我的项目/
|__app1/
|__static/
|__app1/
|__service_worker.js
|__manifest.json
|__app2
|__manage.py
并使用 % static 'app1/service_worker.js' % 访问那些。这种方法的问题是注册的 service_worker.js 的范围仅限于该静态文件夹。我在一个 *** 答案中看到,我可以将服务工作者的范围显式设置为 scope: '/'。但是,我认为我可能缺少更好的方法。如果有人对此有解决方案,请告诉我。
【问题讨论】:
这些只是普通的静态文件,您可以将它们放在其余静态文件所在的任何位置。 @DanielRoseman 我已经尝试过了,但是服务人员的范围仅限于该文件夹下的文件。我希望服务人员的范围涵盖项目中的所有应用程序。 你有答案吗? @HemanthSP 我已经放弃了这个想法,并开始将我的网站构建为一个 Angular 应用程序。但是,看看这个答案***.com/a/40087795/5157204 哈哈哈我也这么想 【参考方案1】:看起来您希望为所有应用程序提供一个通用软件 (1, 2)。您可以在项目根目录中同时拥有 SW 和 manifest.json,将清单链接到项目的主页。如果要缓存整个路径,设置范围不是一个坏主意,officially documented here. 也是如此 在链接页面中查找“注册您的工作人员”部分。
【讨论】:
我有一个静态文件夹中的 SW,当我尝试设置范围时:'/',它显示此错误“提供的范围 ('/') 的路径不在最大范围允许('/static/app 1/')。调整范围,移动 Service Worker 脚本,或者使用 Service-Worker-Allowed HTTP 标头来允许范围。”知道如何解决这个问题吗? 我不会将它放在静态文件夹中并将范围设置为“/”。如果这是您的范围,我会将其放在根文件夹中。通过将 SW 放在项目根目录中,您是否看到任何问题/出现任何错误?如果没有,我会建议这样做。 如果您仍然想通过查看 http 标头来修复范围方式,这是您必须在 Web 服务器级别执行的操作,并且配置取决于您使用的服务器。这是 IIS 的解决方案。你需要这样的东西。 ***.com/a/48068714/1057093 我尝试将 SW 和清单放在根文件夹中,但随后必须通过 django urls.py 将它们用作模板。我这样做了,在 chrome 应用程序选项卡中,它显示的是 (index) 而不是 service worker 文件的名称。我已经看到你上面链接的答案,有没有办法在本地做?【参考方案2】:Service Worker 需要从它将处理的相同路径提供服务,因此如果放在 static 之后,它将仅处理 static/,因此要放在“/”下,您必须创建一个返回 Service Worker js 的视图。
def sw(request):
return HttpResponse(settings.SERVICE_WORKER)
注意:你可以使用django模板来生成最终的js
对于Manifest,它是一个普通的静态文件。
【讨论】:
以上是关于在 django 项目中将 service worker 和 manifest 放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 项目中将请求传递给 Celery 任务参数?
在 Django 模板中将卡片组划分为行的最佳方法 - Django