不要使用runserver,django重新加载静态文件

时间:2017-07-18 20:33:12

标签: python django

我将大json文件作为页面的静态文件加载。这需要几秒钟。 正如我读过并经历过的那样,当我的网站刷新时,Django(以runserver启动)会再次加载这些文件,这不是我想要的,因为加载时间。

我怎样才能最轻松地允许这种行为,以便文件只在服务器启动时加载一次?

提前致谢!

1 个答案:

答案 0 :(得分:0)

首先请注意:

  1. 了解您要求覆盖用户有意做的事情是很重要的。点击刷新意味着客户端特意要求服务器再次加载所有内容,这就是重点。
  2. 浏览器通常会自己缓存页面,这会让您的结果产生怀疑 - 也许您以某种方式禁用了缓存?
  3. 也就是说,如果你知道它们没有改变(例如刷新将产生完全相同的页面),那么在客户端上的数据上缓存大块可能是有用的,并且由于某种原因它们不会缓存我不熟悉用。问题是,因为它是我们正在讨论的页面本身,并且您希望防止下载该页面。纯客户端意味着必须在JS中完成,它在下载页面后开始运行(即使在加载之前) - 您要阻止它。所以实现这一目标的方法可能是:

    1. 页面本身(比如索引)实际上是一个只运行JS的空白页面(可能是加载消息)。
    2. 使用'big'JSON检查存储的cookie是否存在。
    3. 一个。如果找到它 - 请使用document.write覆盖页面。
    4. 湾否则重定向到真正的页面以满载。
    5. 当页面加载时,它当然应该设置cookie。
    6. 实施很简单:

      1. 使用Django urls文件将大型JSON请求重定向到仅包含JS的索引模板。要传递调用的原始页面的名称,可以直接在模板的脚本标记中设置变量(使用Django {{ }}模板变量)。请注意,您需要一种方法来跳过此操作并强制加载,例如POST变量。
      2. 用于创建,编写和阅读cookie的JS遍布互联网。基本上在纯JS document.cookie="name=stuff"中设置cookie,解析decodeURIComponent(document.cookie)读取它。结帐W3Schools可以轻松完成某些功能,如果您的口味等,可以使用jquery进行Google搜索。
      3. 一个。一旦解析了cookie document.write(JSON.parse(json)),如果cookie存在,将立即加载文件。
      4. 湾否则,只需使用一些POST标记进行标准重定向以强制加载 - window.location.replace('path/to/page?force=1')
      5. 再次确保您需要这样做。如果有人知道为什么页面没有被浏览器缓存,请发表评论,我会在这里添加。

        最后一点需要注意 - 如果存在问题,Cookie存储空间仅限4k