【问题标题】:Where to put service worker and manifest in a django project?在 django 项目中将 service worker 和 manifest 放在哪里?
【发布时间】: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 的范围仅限于该静态文件夹。我在一个 stackoverflow 答案中看到,我可以将服务工作者的范围显式设置为 {scope: '/'}。但是,我认为我可能缺少更好的方法。如果有人对此有解决方案,请告诉我。

【问题讨论】:

  • 这些只是普通的静态文件,您可以将它们放在其余静态文件所在的任何位置。
  • @DanielRoseman 我已经尝试过了,但是服务人员的范围仅限于该文件夹下的文件。我希望服务人员的范围涵盖项目中的所有应用程序。
  • 你有答案吗?
  • @HemanthSP 我已经放弃了这个想法,并开始将我的网站构建为一个 Angular 应用程序。但是,看看这个答案stackoverflow.com/a/40087795/5157204
  • 哈哈哈我也这么想

标签: django progressive-web-apps


【解决方案1】:

看起来您希望为所有应用程序提供一个通用软件 (1, 2)。您可以在项目根目录中同时拥有 SW 和 manifest.json,将清单链接到项目的主页。如果要缓存整个路径,设置范围不是一个坏主意,officially documented here. 也是如此 在链接页面中查找“注册您的工作人员”部分。

【讨论】:

  • 我有一个静态文件夹中的 SW,当我尝试设置范围时:'/',它显示此错误“提供的范围 ('/') 的路径不在最大范围允许('/static/app 1/')。调整范围,移动 Service Worker 脚本,或者使用 Service-Worker-Allowed HTTP 标头来允许范围。”知道如何解决这个问题吗?
  • 我不会将它放在静态文件夹中并将范围设置为“/”。如果这是您的范围,我会将其放在根文件夹中。通过将 SW 放在项目根目录中,您是否看到任何问题/出现任何错误?如果没有,我会建议这样做。
  • 如果您仍然想通过查看 http 标头来修复范围方式,这是您必须在 Web 服务器级别执行的操作,并且配置取决于您使用的服务器。这是 IIS 的解决方案。你需要这样的东西。 stackoverflow.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,它是一个普通的静态文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2015-11-12
    • 1970-01-01
    • 2018-07-14
    • 2020-09-02
    • 1970-01-01
    • 2012-11-07
    • 2017-06-01
    相关资源
    最近更新 更多