Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Как отключить странное поведение защиты от кеширования /static/ в Django?

Замечены странные вызовы JavaScript-файлов из папки /static/ в Django. В основном фалы вызываются правильно. Например:
"GET /static/js/jquery-2.1.1.min.js HTTP/1.1" 304 0

Но некоторые почему-то защищены от куширование и вызываются так:
"GET /static/js/login-logout.js?_=1428801732678 HTTP/1.1" 200 1377


Все JS-файлы вызываемые из базового шаблона (включая шаблоны наследующие базовый) вызываются нормально. Как и положено в них записано что-то типа:
{% load staticfiles %}
<script src="{% static 'js/jquery-2.1.1.min.js' %}" type="text/javascript"></script>

Но для шаблонов которые не имеют наследования от базового, например вызываемые через:
<script type="text/javascript">
$(document).ready(function(){
  $('#login-logout').load('login-logout');
})
</script>

и содержащие идентичную конструкцию:
{% load staticfiles %}
<script src="{{ STATIC_URL }}js/login-logout.js" type="text/javascript"></script>

происходит подстановка в конце вызова ?_=1428801732678 (цифры каждый раз разные). Я так понимаю делает это сам Django чтобы предотвратить кэширования. Как это отключить?

P.S. Так понимаю, что это не в настройках settings.py. Ведь там единые настройки бэкенда для /static/ и папочки js/, а значит и вызовы должны быть идентичные, и предусматривать возможность кэширования.

P.P.S. Самое странное, что если в шаблоне написать:
<script src="/static/js/loginlogout.js" type="text/javascript"></script>
то все равно в вызова добавляется этот?_=12куча4цифр5
  • Вопрос задан
  • 629 просмотров
Решения вопроса 1
sim3x
@sim3x
Джанго не делает магии

Для уточнения, посмотри на код страници, что ти получил - там наверняка нет _=12345
Так что джанга тут не при чем

А причем тут jq ajax с его антикешем
https://api.jquery.com/load/

Включать кеш jq глобально однако не стоит

Но для шаблонов которые не имеют наследования от базового, например
не стоит економить на спичках - сделай один файл жс и грузи его при первом заходе. Если файл меньше 256кб его уже никто не заметит (если у тебя не специфический сайт)

Пример как стоит поступать, если я тебя не убедил api.jquery.com/jQuery.getScript
А еще лучше - просто используй $.ajax({cache: true, dataType: 'script'})

Вот зеркальний вопрос
stackoverflow.com/questions/168963/stop-jquery-loa...

<script src="/static/js/blah.js"></script>
type="text/javascript" уже можно не писать, жс - монополист

UPD:
$(document).ready(function(){
  // $('#login-logout').load('login-logout');
  $.ajax(function(){
  cache: true,
  url: 'login-logout.html',
  dataType: 'html'
  success: function(html){
  $('#login-logout').html(html) }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы