2014-04-03 75 views
0

我是OOP和其他所有人都是新手。我想爲django泛型類(DetailView)創建一個方法,在調用視圖時調用子進程。這是我目前工作得很好:創建django泛型類視圖方法

class ThingsObject(SingleObjectMixin): 
    template_name = 'thingsdb/stuff.html' 
    queryset = Things.objects.all() 


class ThingsView(ThingsObject, generic.DetailView): 
    pass 

所以我想定義一個包含請求對象,像這樣的參數上的腳本調用子進程的方法:

def foo(self): 
    bar= "".join(["python", "bar.py", str(self.object)]) 
    subprocess.call(bar, shell=True) 

我希望在調用視圖時運行該方法。迴應應該是腳本返回的內容,我希望將其作爲上下文添加到模板中。

我意識到這個答案對於你的普通程序員來說可能是非常基礎的,但是我一直在玩弄一些解決方案,但一直沒有到位。因此,我問你會如何做到這一點?

我的想法可能是我應該重載dispatch方法來包含運行腳本並返回額外的上下文。但說實話,我不知道我在基於課堂的觀點上做了什麼。

在此先感謝!

+0

不知道你希望在這裏實現什麼。爲什麼要在子進程中調用Python腳本(而不是僅僅導入並調用它)?答案應該是什麼? –

+0

對不起,在寫出原始問題時,我一定喝醉了,我忽略了一個重要的因素 - 迴應應該是腳本返回的內容,我希望將其作爲上下文添加到模板中。子進程並不重要,但我在使用它,因爲我認爲它是在腳本被調用時添加參數的一種方式。我想我可以更直接地做到這一點。我會用這個信息更新我的問題。 – Sirrah

回答

0

如果您想將腳本的結果添加到上下文中,則應該從get_context_data中調用它。這是一個字典,所以你可以在那裏添加你的數據。

請注意,subprocess.call的結果只是腳本的返回代碼,而不是腳本輸出的內容。有很多其他方法可以獲得實際的輸出,但正如我在評論中提到的那樣,似乎沒有任何理由向腳本進行脫殼:因爲它是Python,只需將它導入並在正常的方式。

+0

謝謝你對我公認的奇怪問題的迴應,我會嘗試實施你的建議。我花了一段時間閱讀文檔,但不知何故跳過了get_context_data方法。 – Sirrah