我对Django非常陌生... 我想使用提交按钮在后台运行python文件并在下一页显示内容... 但是我的python文件需要一些时间才能取出结果,因此在两者之间,我想在两者之间放置一个正在加载的html页面。...
我写了一些可以正确运行python文件的代码,但是我无法在两者之间合并加载页面... 看看我在views.py
中的功能def submit(request):
info = request.POST['info']
print('value is ', info)
filename = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
result = run(['python', filename, info], stdout= PIPE )
return render_to_response("loading.html")
run(['python', filename, info], stdout= PIPE )
return render(request, 'python_output.html', context)
实际结果: 返回render_to_response(“ loading.html”) 可以,但是控件不会转移到运行命令... 我想运行正在加载的html页面,并在后台运行python文件,当python文件运行完成时,应移至显示输出的python _output.html页面...
预期: 加载页面应该可以正常工作,然后该控件应转到运行命令,然后应该转到python_output.html页面... /
答案 0 :(得分:1)
return
语句将终止该函数的执行,因此其下的任何内容均将无法获得。
您可以使用Javascript显示加载图标,然后使用JQuery在后台运行GET请求,并在其中调用Django的自定义视图,该视图将输出命令的结果。收到数据后,您可以删除图标并根据需要处理数据。
基本示例:
Django
------
url(r'^command/', views.command, name='command'),
def command(request):
info = request.POST['info']
filename = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
result = run(['python', filename, info], stdout= PIPE
return result
Javascript
----------
<img id="loading-icon" src="loading.gif">
$.get("/command", function(text)
{
$("#loading-icon").remove();
process(text);
});
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试在加载第一页(loading.html)时使用ajax请求在后台运行python文件,并在完成后通过output.html显示结果。
使用JQuery,必须在模板文件中调用如下函数:
Option Explicit
Sub SearchForString()
Dim a As Long, arr As Variant, fnd As Range, cpy As Range, addr As
String
On Error GoTo Err_Execute
'populate the array for the outer loop
arr = Array("trigger")
With Worksheets("test")
'outer loop through the array
For a = LBound(arr) To UBound(arr)
'locate first instance
Set fnd = .Columns("A").Find(what:=arr(a), LookIn:=xlFormulas, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not fnd Is Nothing Then
'record address of first find
addr = fnd.Address
'seed the cpy range object
If cpy Is Nothing Then Set cpy = fnd.EntireRow
Do
'build union
Set cpy = Union(cpy, fnd.EntireRow)
'look for another
Set fnd = .Columns("A").FindNext(after:=fnd)
'keep finding new matches until it loops back to the first
Loop Until fnd.Address = addr
End If
Next a
End With
With Worksheets("test")
'one stop copy & paste operation
cpy.Copy Destination:=.Cells(.Rows.Count, "c").End(xlUp).Offset(1, 0)
End With
MsgBox "All matching data has been copied."
Exit Sub
End Sub
希望我能理解你的问题。
答案 3 :(得分:0)
您想要的工作比预期的要多:
搜索“ django芹菜教程”,您会发现很多示例。