У меня есть приложение 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'),)
...