Каждая страница с extends перезагружает javascript (и восстанавливает ws-соединение) - PullRequest
0 голосов
/ 20 февраля 2019

Добрый день,

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

У меня есть базовый шаблон и два шаблона, которые расширяют базовый.Базовый шаблон содержит файл websocket.js, который устанавливает соединение WebSocket, когда пользователь открывает страницу.Проблема в том, что когда он щелкает по какой-либо ссылке, ведущей на какую-то дочернюю страницу, браузер перезагружает все статические файлы, включая websocket.js, что приводит к отключению / повторному подключению соединения WebSocket.

Вопрос, как можно избежать таких перезагрузок.Следует избегать использования extends и переходить к динамическим обновлениям страниц в стиле 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 %}

1 Ответ

0 голосов
/ 20 февраля 2019

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

...