我已经为此奋斗了一段时间了,我尝试用分页实现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"),
]
URL“/results/”与
courses
的模式匹配,因此将调用该视图。您应该交换顺序,以便Django首先与文本字符串“results”匹配。你知道吗另外,如果您使用的是“path”,那么最好保持一致并在整个过程中使用它—Django在新格式中包含了一个“slug”类型。所以:
最后,请注意,您的results URL没有捕获“slug”参数,因此您的视图不应该期望它,也不应该在搜索查询中使用它。你知道吗
相关问题 更多 >
编程相关推荐