我試圖訪問視圖實例的屬性在中間件層。
例如,給出一個基於類的觀點是這樣的:
# views.py
class MyView(View):
my_attribute = 'something'
我很想能夠通過做這樣的事情得到一個手柄上my_attribute
中間件:
# middleware.py
def process_view(self, request, view_func, view_args, view_kwargs):
my_attribute = request.view.my_attribute
當然,這不起作用,因爲Django不會通過請求對象公開視圖實例。有沒有辦法讓這個成就?
謝謝!
我第一次嘗試:
我開始盤算了一下,process_view()
方法可能做到這一點的好地方。不幸的是,它接收的view_func
參數包含一個函數 - MyView.as_view()
的輸出 - 而不是視圖實例本身。從Django docs:
process_view(個體經營,要求,view_func,view_args,view_kwargs)
... view_func是Python函數,Django將要使用的。 (它的實際功能 對象,函數作爲字符串的不是名稱。)...
我的第二次嘗試:
的句柄查看實例可用process_template_response()
方法,但它非常尷尬,並且無論如何,我希望能夠在中間件堆棧的早期階段與my_attribute
一起使用。但這確實有效:
def process_template_response(self, request, response):
my_attribute = response.context_data['view'].my_attribute
什麼是你正在試圖解決這個問題? –
@ burhan-khalid:目標是根據視圖屬性的值在模板上下文中放置一些數據。我會用上下文處理器來做到這一點,但是還沒有找到在上下文處理器中訪問視圖實例的方法。我目前的做法是使用一個覆蓋'get_context_data()'的mixin。這可以完成工作,但是每個請求都需要這個功能,所以我想避免在應用程序的每個視圖中從mixin繼承。 – tino
我也可以考慮一些其他的應用程序。只是一個例子:一個簡單的方法來處理視圖訪問控制。我知道還有其他處理訪問控制的方式,但這似乎是一種特別簡單的方法,我很想知道它是否可行。 – tino