如何解决此错误[缺少1个必需的位置参数:“请求”]?

2024-04-18 11:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在Django项目中尝试使用DetailView类上的会话时,出现了一个错误,由于缺少一个请求对象,该会话无法工作

那样的话,我该怎么办

你介意告诉我如何解决这个问题吗

先谢谢你


错误代码

TypeError at /detail/41/
check_session() missing 1 required positional argument: 'request'

视图.py

class DetailView(LoginRequiredMixin, generic.DetailView):  
  model = sampleDB
  template_name = 'detail.html'

  def check_session(self, request):
      if not 'history' in request.session:
          request.session['history'] = {'user': self.request.user, 'id': self.kwargs['pk']}

  def get_context_data(self, **kwargs):
      self.check_session()
      context = super().get_context_data(**kwargs)
      return context

project/url.py

from django.contrib import admin
from django.contrib.staticfiles.urls import static
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('accounts/', include('allauth.urls')),
]

app/url.py

from django.urls import path
from . import views

app_name = 'app'
urlpatterns = [
    path('', views.WelcomeView.as_view(), name='welcome'),
    path('home/', views.HomeView.as_view(), name='home'),
    path('detail/<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('detail_edit/<int:pk>/', views.DetailEditView.as_view(), name='detail_edit'),
    path('resister_history/', views.ResisterHistoryView.as_view(), name='resister_history'),
    path('resister_vegetable/', views.ResisterVegetableView.as_view(), name='resister_vegetable'),
    path('delete/<int:pk>/', views.DeleteView.as_view(), name='delete'),
    path('inquiry_login/', views.InquiryLoginView.as_view(), name='inquiry_login'),
    path('inquiry/', views.InquiryView.as_view(), name='inquiry'),

    path('404/', views.Error404View.as_view(), name='404'),
    path('403/', views.Error403View.as_view(), name='403'),
    path('500/', views.Error500View.as_view(), name='500'),

]

开发环境

  • Python:3.7.5
  • Django:2.2.2

Tags: pathnamefromimportselfviewrequestsession
1条回答
网友
1楼 · 发布于 2024-04-18 11:30:36

check_session() missing 1 required positional argument: 'request'

在某个时刻,您调用方法check_session()。方法check_session()的定义如下:

def check_session(self, request):

这意味着您指示该方法希望您这样调用它: check_session(request=some_value)而不是check_session(some_value)

可以像check_session(some_value)一样传递它,但随后必须遍历kwargs才能找到要查找的内容。但可读性较差,工作较多


早上喝咖啡后:

在views.py中,从get_context_data调用self.check_session()check_session希望向它传递一些东西。你没有通过任何考试

相关问题 更多 >