[英]__init__() missing 1 required positional argument: 'request' parent constructor error while extending class
我正在嘗試從我的自定義管理部分的 baseView 擴展基於 class 的視圖。 以下是儀表板部分的視圖。
class Dashboard(BaseAdminView):
def __init__(self, request):
super().__init__(request)
def get(self, request):
return render(request, 'admin/pages/dashboard.html', {'hello': 'World'})
同樣,以下是我將為幾乎所有相關視圖類擴展的基本管理視圖。
class BaseAdminView(View):
loggedInUser = None
def __init__(self, request):
if (request.session['loggedInAdministrator'] is None):
return redirect('adminlogin')
else:
loggedInUser = request.session['loggedInAdministrator']
我的問題是當我嘗試訪問儀表板時,我得到__init__() missing 1 required positional argument: 'request'
錯誤。
是不是self
然后在這里request
變量的順序,或者我錯過了什么。 我也刪除了self
問題還是一樣的。 如果我選擇不使用請求變量,構造函數雖然可以正常工作,但使用會話是我首先要做的唯一需要。
我該如何做這個工作? 如何訪問父 class 中的請求?
我也看到了
def __init__(self, request):
super().__init__(request)
儀表板中的此代碼是不必要的,因為即使我刪除它,也會調用基本構造函數。 這是它的工作原理嗎? 童話般的語言和框架新手..
添加:相關應用程序中的urls.py
urlpatterns = [
path('', views.Dashboard.as_view(), name='adminhome'),
path('login', views.Login.as_view(), name='adminlogin'),
path('logout', views.Logout.as_view(), name='adminlogout')
]
根據您的問題,您需要執行一些與request
相關的操作 object 在您進入view
中的GET/POST
等請求方法處理程序之前,在幕后,在__init__()
方法中,您沒有收到任何request object
,因為您可以查看是否將*args
和**kwargs
添加到init ,您的視圖類中有空。
你不應該覆蓋__init__()
。 請求 object 首先在 dispatch() 方法中可用,該方法在__init__()
之后立即調用,但您也不需要覆蓋該方法。 它的主要目的是調用get()
、 post()
或其他相關的方法處理程序。 然而,一般來說,也沒有必要覆蓋這些。
但是,如果您確實必須盡可能早地捕獲請求,那么調度方法是您最好的選擇。
您的BaseAdminView
class 看起來像這樣:
class BaseAdminView(View):
loggedInUser = None
def dispatch(self, request, *args, **kwargs):
if request.session['loggedInAdministrator'] is None:
return redirect('adminlogin')
else:
self.loggedInUser = request.session['loggedInAdministrator']
return super().dispatch(request, *args, **kwargs)
和Dashboard
class 看起來像這樣:
class Dashboard(BaseAdminView):
def get(self, request):
return render(request, 'admin/pages/dashboard.html', {'hello': 'World'})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.