Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django渐进式web应用缓存和获取模板问题_Javascript_Django_Service Worker - Fatal编程技术网

Javascript Django渐进式web应用缓存和获取模板问题

Javascript Django渐进式web应用缓存和获取模板问题,javascript,django,service-worker,Javascript,Django,Service Worker,我正在尝试使用渐进式web应用程序运行django应用程序,但要让我的服务人员运行,它需要与所有模板在同一文件夹中运行,这似乎是一个问题。不幸的是,在django应用程序上,模板被组织到不同的模块/应用程序中 基于教程-service worker文件(sw.js)需要与要缓存的模板位于同一文件夹中。请参见 . 但是根据youtube上的教程,看起来可以通过包含{%url“urltobecached”%}来完成。但这就引出了一个问题:如何让sw.js文件从所有需要缓存的模板中读取,因为它们都需要

我正在尝试使用渐进式web应用程序运行django应用程序,但要让我的服务人员运行,它需要与所有模板在同一文件夹中运行,这似乎是一个问题。不幸的是,在django应用程序上,模板被组织到不同的模块/应用程序中

基于教程-service worker文件(sw.js)需要与要缓存的模板位于同一文件夹中。请参见 . 但是根据youtube上的教程,看起来可以通过包含{%url“urltobecached”%}来完成。但这就引出了一个问题:如何让sw.js文件从所有需要缓存的模板中读取,因为它们都需要与静态文件夹中的sw.js位于同一文件夹中。我无法找到任何可以解决此问题的资源。有没有人有这方面的经验来建议如何做到这一点

下面是所有相关代码的示例

home.html

{% load staticfiles %}

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Testing</title>
  <link rel="stylesheet" href="{% static 'styles.css' %}">

</head>

<body>

<script type="text/javascript">

  if ('serviceWorker' in navigator){
      try {
        navigator.serviceWorker.register("{% static 'sw.js' %}")
        console.log('sw registered')
      } catch (error) {
        console.log('sw reg failed')
      }
    }

</script>

</body>

</html>
视图.py

from django.shortcuts import render
from django.views.generic import TemplateView, View
# Create your views here.
from django.http import HttpResponse
import os

class HomeView(TemplateView):
    template_name = "home.html"

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

class Test1View(TemplateView):
    template_name = "test1.html"

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)
from django.contrib import admin
from django.urls import path
from jsref.views import HomeView, Test1View
# from jsref.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', HomeView.as_view(), name='Home'),
    path(r'test1/', Test1View.as_view(), name='test1')

]
url.py

from django.shortcuts import render
from django.views.generic import TemplateView, View
# Create your views here.
from django.http import HttpResponse
import os

class HomeView(TemplateView):
    template_name = "home.html"

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

class Test1View(TemplateView):
    template_name = "test1.html"

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)
from django.contrib import admin
from django.urls import path
from jsref.views import HomeView, Test1View
# from jsref.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', HomeView.as_view(), name='Home'),
    path(r'test1/', Test1View.as_view(), name='test1')

]

对于任何想测试它的人。我在github上的

上有它,基本上,服务工作者需要在应用程序的根目录中缓存所有页面参考:

服务工作者将只捕获来自客户端的请求 服务人员的工作范围。服务人员的最大作用域是 工人的位置


基本上,服务工作者需要位于应用程序的根目录中,才能缓存所有页面ref:

服务工作者将只捕获来自客户端的请求 服务人员的工作范围。服务人员的最大作用域是 工人的位置


服务人员完全是客户端的。不管您的服务器文件夹结构是什么,也不管页面是从模板、静态html页面还是其他什么创建的

服务工作者默认作用域是其服务来源的路径。因此,如果您希望django应用程序的所有路由都在范围内,则必须设置url路由,以便从网站根路径为service worker js文件提供服务

https://example.com/sw.js
所以,如果您需要整个站点都在范围内,您必须配置django的url路由器或Web服务器来使用该路由

例如,您可以像这样在nginx中配置别名

location /sw.js { alias /static/sw.js; }
并确保在javascript代码中也使用根路径

navigator.serviceWorker.register("/sw.js")

服务人员完全是客户端的。不管您的服务器文件夹结构是什么,也不管页面是从模板、静态html页面还是其他什么创建的

服务工作者默认作用域是其服务来源的路径。因此,如果您希望django应用程序的所有路由都在范围内,则必须设置url路由,以便从网站根路径为service worker js文件提供服务

https://example.com/sw.js
所以,如果您需要整个站点都在范围内,您必须配置django的url路由器或Web服务器来使用该路由

例如,您可以像这样在nginx中配置别名

location /sw.js { alias /static/sw.js; }
并确保在javascript代码中也使用根路径

navigator.serviceWorker.register("/sw.js")