【发布时间】:2021-07-28 18:37:45
【问题描述】:
我有
查看.py
class mainView(View):
template_name = "search.html"
def error_page(self,request):
return render(request, 'error_page.html')
def getQuery(self,query,):
posts_list = Galeria.objects.filter(
Q(nazwa__icontains=query) | Q(opis__icontains=query)
).distinct()
return(posts_list)
def postPagination(self,paginator,page):
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return posts
def post_list(self,request, category_slug=None, **kwargs):
posts_list = Galeria.objects.all()
query = request.GET.get('q')
if query:
posts_list = self.getQuery(query)
ile = posts_list.count
paginator = Paginator(posts_list, 10) # 10 posts per page
page = request.GET.get('page')
posts = self.postPagination(paginator, page)
category = None
categories = Category.objects.all()
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
categories_ile = Galeria.objects.values('category__name').annotate(count=Count('category__name'))
context = {
'posts': posts,
'ile': ile,
'categories': categories,
'category': category,
'categories_ile': categories_ile}
return render(request, "search.html", context)
...
url.py
urlpatterns = [
path('searchbar/', mainView.post_list, name="searchbar"),
...
]
为什么我收到错误“post_list() 缺少 1 个必需的位置参数:'request'”? 我尝试了一切,并阅读了此页面上的文档https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/ 还是什么都没有。
【问题讨论】:
-
根据您链接的文档,看起来
path的第二个参数应该是as_view()调用的结果,而不是采用request参数的实例方法。你觉得mainView.post_list应该怎么做? -
我只是尝试将 view.py 中的函数重构为类,效果很好。我在想它可以在课堂上使用,也可以在没有的情况下使用