我想使用我在整個網站上編寫的一些中間件(大量頁面,所以我選擇不使用裝飾器,因爲我想用代碼所有頁面)。唯一的問題是我不想爲管理代碼使用中間件,並且它似乎對它們很活躍。有條件的Django中間件(或如何排除管理系統)
有沒有什麼辦法可以配置settings.py或urls.py或者可能是代碼中的某些東西來阻止它在管理系統的頁面上執行?
任何幫助非常讚賞,
乾杯
保羅
我想使用我在整個網站上編寫的一些中間件(大量頁面,所以我選擇不使用裝飾器,因爲我想用代碼所有頁面)。唯一的問題是我不想爲管理代碼使用中間件,並且它似乎對它們很活躍。有條件的Django中間件(或如何排除管理系統)
有沒有什麼辦法可以配置settings.py或urls.py或者可能是代碼中的某些東西來阻止它在管理系統的頁面上執行?
任何幫助非常讚賞,
乾杯
保羅
你可以檢查在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
的我想這樣做的主要原因是在中間件中使用了一個XML解析器,該解析器搞亂了非XML下載。我已經添加了一些代碼來檢測代碼是否是XML,而不是試圖解析它不應該解析的東西。
對於其他不方便的中間件,我可能會使用上面piquadrat概述的方法,或者也許只是使用視圖裝飾器 - 乾杯piquadrat!將(基於piquadrat的答案)
一般的方式
def process_request(self, request):
if request.path.startswith(reverse('admin:index')):
return None
# rest of method
這樣,如果有人更改/admin/
到/django_admin/
你仍然覆蓋。
請記住,您的路徑可能有語言前綴! (例如/ en/admin) – Florian 2017-05-10 09:54:15