2009-06-22 14 views
14

我想使用我在整個網站上編寫的一些中間件(大量頁面,所以我選擇不使用裝飾器,因爲我想用代碼所有頁面)。唯一的問題是我不想爲管理代碼使用中間件,並且它似乎對它們很活躍。有條件的Django中間件(或如何排除管理系統)

有沒有什麼辦法可以配置settings.py或urls.py或者可能是代碼中的某些東西來阻止它在管理系統的頁面上執行?

任何幫助非常讚賞,

乾杯

保羅

回答

6

你可以檢查在process_request路徑(以及任何其他工藝_ * - 方法,中間件)

def process_request(self, request): 
    if request.path.startswith('/admin/'): 
     return None 
    # rest of method 

def process_response(self, request, response): 
    if request.path.startswith('/admin/'): 
     return response 
    # rest of method 
0

的我想這樣做的主要原因是在中間件中使用了一個XML解析器,該解析器搞亂了非XML下載。我已經添加了一些代碼來檢測代碼是否是XML,而不是試圖解析它不應該解析的東西。

對於其他不方便的中間件,我可能會使用上面piquadrat概述的方法,或者也許只是使用視圖裝飾器 - 乾杯piquadrat!將(基於piquadrat的答案)

25

一般的方式

def process_request(self, request): 
    if request.path.startswith(reverse('admin:index')): 
     return None 
    # rest of method 

這樣,如果有人更改/admin//django_admin/你仍然覆蓋。

+0

請記住,您的路徑可能有語言前綴! (例如/ en/admin) – Florian 2017-05-10 09:54:15