【发布时间】:2020-03-29 04:21:01
【问题描述】:
当我尝试在 Django 项目中的 DetailView 类上使用会话时,出现错误并且由于缺少请求对象而无法正常工作。
那我该怎么办?
您介意告诉我应该如何解决这个问题吗?
提前谢谢你。
错误代码
TypeError at /detail/41/
check_session() missing 1 required positional argument: 'request'
views.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/urls.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/urls.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
【问题讨论】:
-
当您调用
self.check_session()时,您没有传递任何参数,尽管它需要一个。你应该给它什么? -
self.check_session(self.request) 或修改你的函数,它不接受请求参数,因为它可以通过 self 获得
-
@C.Nivs,我想将请求传递给 check_session,但我不知道如何传递。
-
@iklinac,当我尝试使用 self.check_session(self.request) 时,我遇到了这个错误 [CustomUser 类型的对象不是 JSON 可序列化的]
-
@tio 请显示您的 URL 模式。可能,错误就在那里。
标签: python django python-3.x