Добрый день,
Я немного застрял с одной проблемой и почему-то не могу найти решение.
У меня есть базовый шаблон и два шаблона, которые расширяют базовый. Базовый шаблон включает файл websocket.js, который устанавливает соединение WebSocket, когда пользователь открывает страницу. Проблема в том, что когда он нажимает на какую-то ссылку, которая ведет на какую-то дочернюю страницу, браузер перезагружает все статические файлы, включая websocket.js, что приводит к отключению/повторному подключению соединения WebSocket.
Вопрос, как мне избежать таких перезагрузок. Следует избегать использования расширений и переходить на динамические обновления страниц в стиле jQuery без каких-либо перезагрузки, или я могу сохранить объект javascript WebSocket где-то в глобальном масштабе и не устанавливать новое соединение, если этот объект не не определен (я тоже не знаю, как это сделать) .
websocket.js прост:
var websocketServerLocation = 'ws://' + window.location.host +
'/ws/dashboard/';
function start(websocketServerLocation) {
ws = new WebSocket(websocketServerLocation);
ws.onmessage = function (e) {
var data = JSON.parse(e.data);
drawDashboard(data);
};
ws.onclose = function () {
// Try to reconnect in 5 seconds
setTimeout(function () {
start(websocketServerLocation)
}, 5000);
};
}
start(websocketServerLocation);
base.html:
{% load staticfiles %}
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<head>
....
<script type = "text/javascript" src = "{% static "websocket.js" %}"></script>
</head>
<body>
...
<div class = "collapse navbar-collapse" id = "navbarSupportedContent">
<ul class = "navbar-nav mr-auto">
<li class = "nav-item active">
<a class = "nav-link" href = "{% url 'child1' %}">child1<span class = "sr-only">(current)</span></a>
</li>
<li class = "nav-item">
<a class = "nav-link" href = "{% url 'child2' %}">child2</a>
....
</html>
Какой-то "ребенок":
{% extends "base.html" %}
{% load staticfiles %}
{% block content %}
{% endblock %}





Django рассматривает каждый шаблон как новую страницу или запрос, даже если они расширяют один и тот же базовый шаблон. Так что сохранить базовый шаблон не получится. В некоторых других случаях вы можете запустить все через jQuery и ajax, чтобы выполнить свою работу.