我有一个动态创建的表,其中包含来自django模型的数据。此表显示有关每个data_element的其他信息。
在最后一栏中应该
我如何用django编程? 目前我正在手动执行脚本,但为此我将重定向到另一个模板,其中args将被解析,并且当执行脚本时(使用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
但是当我点击那个按钮时,没有任何反应。我该怎么做才能创建该表?
修改 我的按钮的功能目前如下所示:
$(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 }}>
如果脚本仍在运行,我现在如何动态更改按钮?
答案 0 :(得分:1)
您需要一种方法来启动异步任务,以及获取任务状态的方法,然后添加一些js / ajax代码来启动任务并相应地更新您的表。
对于前两部分,规范解决方案是celery。
答案 1 :(得分:0)
另一种不太推荐的方法(不太推荐,但可能比芹菜更容易设置)只需spawn a child, detached process即可在后台完成工作并将状态和结果存储在某处(例如在您的位置)数据库或像redis这样的内存存储。
主要的缺点是你无法控制子进程中发生的事情。根据您的项目 - 如果您不关心过程控制 - 它可能会成为更好的解决方案。