在 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 modelForm 中的文件上传

在 Django Urls 中将 URL 作为参数传递

在 Django 模板中将卡片组划分为行的最佳方法 - Django

如何在 django 管理中将多个图像上传与 UPLOADIFY 集成?

如何在 PyCharm 中将多个目录编辑为一个项目?