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

2024-04-25 04:57:53 发布

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

我已经为此奋斗了一段时间了,我尝试用分页实现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)

网址:

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

Tags: namegetindexobjectsrequestpagerangepages
1条回答
网友
1楼 · 发布于 2024-04-25 04:57:53

URL“/results/”与courses的模式匹配,因此将调用该视图。您应该交换顺序,以便Django首先与文本字符串“results”匹配。你知道吗

另外,如果您使用的是“path”,那么最好保持一致并在整个过程中使用它—Django在新格式中包含了一个“slug”类型。所以:

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

最后,请注意,您的results URL没有捕获“slug”参数,因此您的视图不应该期望它,也不应该在搜索查询中使用它。你知道吗

相关问题 更多 >