Django не загружает файлы c после открытия нового окна с JS - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть приложение Django, и похоже, что я что-то не так сделал с файлами stati c. Мои файлы stati c работают по мере необходимости во всем проекте, кроме одного момента. У меня есть следующая js функция:

function sendForm() {
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState === 4 && this.status === 200) {
            window.open('/url/to/open/' + xhr.responseText);
        }
    };

    let info = document.querySelector("#parameters");
    let data = new FormData(info);

    xhr.open("POST", "/url/to/open/", true);
    xhr.setRequestHeader("X-CSRFToken", document.getElementsByName("csrfmiddlewaretoken")[0].value);
    xhr.send(data)
}

Этот код работает, и новая вкладка загружает все имеющиеся у него файлы * stati c. Но если я сделаю Ctrl + F5 на любой странице, то увижу

[01/Apr/2020 05:53:42] "GET /static/images/logo.png HTTP/1.1" 404 1669
[01/Apr/2020 05:53:42] "GET /static/js/scripts.js HTTP/1.1" 404 1663
[01/Apr/2020 05:53:42] "GET /static/icons/cat.png HTTP/1.1" 404 1669
[01/Apr/2020 05:53:42] "GET /static/css/style.css HTTP/1.1" 404 1663
[01/Apr/2020 05:53:42] "GET /static/icons/dog.png HTTP/1.1" 404 1675
[01/Apr/2020 05:53:42] "GET /static/icons/butterfly.png HTTP/1.1" 404 1678
[01/Apr/2020 05:53:43] "GET /static/css/style.css HTTP/1.1" 404 1663
[01/Apr/2020 05:53:43] "GET /static/js/scripts.js HTTP/1.1" 404 1663
[01/Apr/2020 05:53:43] "GET /static/favicon.ico HTTP/1.1" 404 1657

, что означает, что Django потерял где-то мои stati c файлы. С этого момента файлы stati c всегда будут возвращать 404. Можете ли вы объяснить, что это происходит и как это исправить?

Шаблон с sendForm() вызывающей стороной. Этот шаблон не имеет {% extends "base.html" %}, потому что я отображаю этот шаблон с xhr. Таким образом, он становится частью другого шаблона.

{% if success %}
    <button onclick="sendForm()">Do the thing</button>
{% else %}
    ....
{% endif %}

Его вид

def check_instructions(request):
    if request.method == 'POST':
        .... (some db logic)
        return render(request, 'template_name.html', {....})

Страница, которая открывается в sendForm():

{% extends "base.html" %}
{% load static %}
{% block title %}Title{% endblock %}
{% block content_div %}
    {% csrf_token %}
    <script>
        var res = setInterval(getInfo, 2000);
    </script>
    <div id="data">
        ...
    </div>
{% endblock %}

Здесь getInfo() работает хорошо до перезагрузки

Его вид

def get_realtime_info(request, id):
    if request.method == 'POST':
        .... (some db logic)
        return render(request, 'template_name.html', {....})

settings.py

...
STATIC_URL = '/static/'

STATICFILES_DIRS = (os.path.join('static'),)
...
...