У меня динамически созданная таблица с данными из модели django. В этой таблице отображается дополнительная информация о каждом элементе data_element.Функция вызова Django с кнопки, оставаясь на той же странице
В последнем столбце должны либо
- быть кнопка отображается для каждой строки, которая будет запускать скрипт с дополнительными ключевыми словами из этого конкретного data_element, без перезагрузки или замораживания страницы.
- Если сценарий все еще работает (может занять несколько часов) должен быть значок прогресс отображается и
- если сценарий уже закончен, там должна быть кнопка отображается, перенаправляя на results.html
Как я могу запрограммировать это с помощью django? В настоящее время я выполняю скрипт вручную, но для этого я перенаправляю на другой шаблон с аргументами для анализа и при выполнении сценария (с помощью call_command ('my_script', * args) страница замерзает до окончания скрипта.
<form action="{% url 'calculate' element_id %}">
<input class="btn btn-primary-custom" id="submit" type="submit" value="run script">
</form>
Я попытался вставить код с этого поста: Django button ajax click
Но когда я нажимаю на эту кнопку ничего не происходит Что мне нужно сделать, чтобы создать эту таблицу.?
EDIT функция для моей кнопки в настоящее время выглядит следующим образом:
$(document).ready(function(){
$('.calculate-btn').bind('click', function(){
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var btn-data= $(this).attr('btn-data');
var csrftoken = getCookie('csrftoken');
$.ajax({
type: 'POST',
url : "/run/",
dataType: "html",
data : {'csrfmiddlewaretoken': csrftoken, 'btn-data':btn-data},
success: function(data, status, xhr){
console.log("SUCCESS")
},
error: function(data, status, xhr){
console.log("ERROR")
}
});
return false;
});
});
и мой взгляд вызывается из кнопки мыши:
<input id="{{item.id}}" class='calculate-btn' name="update_log" type="button" value="Run Script" btn-data={{ item.id }}>
Как я теперь динамически изменять кнопку , пока скрипт все еще работает?
Мне не нужно управлять процессом, пока пользователь не может запустить сценарий еще раз, пока он уже запущен. Как я могу порождать ребенка для этой конкретной строки, не выходя из страницы? – Ali
Итак, я запускаю свой скрипт с помощью 'subprocess.Popen (['python', 'my_script.py', args])'. Я могу проверить внутри этого скрипта python, используя '.pool()', если он закончен, но как я могу проверить это динамически на веб-сайте, когда пользователь просматривает? – Ali