匹配查询不存在 - Django搜索中的错误



我已经为此挣扎了一段时间。我试图用分页实现django搜索。分页有效,但是当我尝试搜索某些内容时,我会收到此错误:

Course matching query does not exist.

这是追溯:https://pastebin.com/jjp2hlus

和代码:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def pagination(request, data, num=10):
    paginator = Paginator(data, num)
    page = request.GET.get('page')
    try:
        courses = paginator.page(page)
    except PageNotAnInteger:
        courses = paginator.page(1)
    except EmptyPage:
        courses = paginator.page(paginator.num_pages)
    index = courses.number - 1
    max_index = len(paginator.page_range)
    start_index = index - 5 if index >= 5 else 0
    end_index = index + 5 if index <= max_index - 5 else max_index
    page_range = paginator.page_range[start_index:end_index]
    return courses, page_range

def search(request):
    query = request.GET.get('q')
    if query:
        results = Course.objects.filter(Q(name__icontains=query))
    else:
        results = Course.objects.get()
    pages = pagination(request, results, num=1)
    context = {
        'courses': pages[0],
        'page_range': pages[1],
        'query': query,
    }
    return render(request, 'courses/index.html', context)

def courses(request, slug):
    query = Course.objects.get(slug=slug)
    context = {'courses': Course.objects.filter(slug=slug),
               'lectures': query.lectures.order_by('lecture_category'),
               }
    return render(request, 'courses/courses.html', context)

url:

urlpatterns = [
    path('', views.index, name='index'),
    re_path('(?P<slug>[w-]+)/', views.courses, name='courses'),
    path('results/', views.search, name="search"),
]

url"/result/"匹配courses的模式,以便调用该视图。您应该交换订单,以使Django首先与字符串"结果"匹配。

另外,如果您使用的是"路径",最好保持一致并在整个过程中使用-Django在新格式中包含" slug"类型。所以:

urlpatterns = [
    path('', views.index, name='index'),
    path('results/', views.search, name="search"),
    path('<slug:slug>/', views.courses, name='courses'),
]

最后,请注意,您的结果URL没有捕获" slug"参数,因此您的视图不应该期望,并且您不应该在搜索查询中使用它。

最新更新