2010-02-04 51 views
1

比方說,我有一個觀點:Django的中間件:如何訪問視圖的PARAMS從中間件

def pony_view(request, arg1, arg2): 
    ... Make ponies, etc ... 

和中間件:

class MyMiddleware(object): 
    def process_request(request): 
     # How do I access arg1, arg2 here? 

當然ARG1,並ARG2將被傳遞通過URL參數與urls.py.

我需要這樣做的原因是因爲我想在視圖函數運行之前向request.session添加一些東西(我需要從URL中獲得一些東西)。

回答

8

您將不得不實施process_view方法。

它具有這樣的特徵:

process_view(self, request, view_func, view_args, view_kwargs) 

,被稱爲視圖功能之前執行:

process_view()被稱爲的Django調用視圖之前。它應返回NoneHttpResponse對象。如果返回None,則Django將繼續處理此請求,執行任何其他process_view()中間件,然後執行相應的視圖。如果它返回一個HttpResponse對象,那麼Django不會打擾任何其他請求,視圖或異常中間件或適當的視圖;它會返回HttpResponse。響應中間件始終在每個響應中調用。

那麼你應該能夠訪問arg1arg2有:

class MyMiddleware(object): 
    def process_view(self, request, view_func, view_args, view_kwargs): 
     arg1, arg2 = view_args[:2] 
+0

感謝菲利克斯。那很完美。 – orokusaki 2010-02-04 04:18:31

相關問題