Reputation: 1183
I'm having an issue when someone goes to do a search in my search box (which corresponds to the 'search' view). The word 'search' is getting picked up by the 'search_category' view and trying to run the query using the word 'search' to match instead. I think i can see why it is happening--essentially the search and search_category views are both looking for a word after my url. I'm just confused as to why the actual views are not getting picked up and the URL's are being mixed up? Here are my views as well:
My urlpatterns
urlpatterns = [
url(r'^(?P<letter>[a-zA-Z])/$', views.mineral_letter, name='letter'),
url(r'^(?P<category>[a-zA-Z\s]+)/$', views.search_category, name='category'),
url(r'^$', views.mineral_list, name='list'),
url(r'^(?P<pk>\d+)/$', views.mineral_detail, name='detail'),
url(r'^search/$', views.search, name='search'),
]
my views:
def mineral_list(request):
minerals = Mineral.objects.all()
return render(request, 'minerals/mineral_list.html', {'minerals': minerals})
def mineral_detail(request, pk):
mineral = Mineral.objects.get(pk=pk)
return render(request, 'minerals/mineral_detail.html', {'mineral': mineral})
def mineral_letter(request, letter):
minerals = Mineral.objects.filter(name__istartswith=letter.lower())
return render(request, 'minerals/mineral_list.html', {'minerals': minerals, 'active_letter':letter})
def search(request):
term = request.GET.get("q")
minerals = Mineral.objects.filter(name__icontains=term)
return render(request, 'minerals/mineral_list.html', {'minerals': minerals})
def search_category(request,category):
minerals = Mineral.objects.filter(category__icontains=category)
return render(request,'minerals/mineral_list.html', {'minerals':minerals})
Upvotes: 1
Views: 523
Reputation: 124
Try this order:
urlpatterns = [
url(r'^$', views.mineral_list, name='list'),
url(r'^search/$', views.search, name='search'),
url(r'^(?P<letter>[a-zA-Z])/$', views.mineral_letter, name='letter'),
url(r'^(?P<category>[a-zA-Z\s]+)/$', views.search_category, name='category'),
url(r'^(?P<pk>\d+)/$', views.mineral_detail, name='detail'),
]
Upvotes: 2