Каждая страница с расширениями перезагружает javascript (и восстанавливает соединение ws)

Добрый день,

Я немного застрял с одной проблемой и почему-то не могу найти решение.

У меня есть базовый шаблон и два шаблона, которые расширяют базовый. Базовый шаблон включает файл 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 %}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
40
1

Ответы 1

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

Другие вопросы по теме